¿Es este diseño legal en verilog?

1

Estoy tratando de simular un procesador similar a mips usando verilog. Ya que soy nuevo en verilog, no sé si el diseño es correcto o no. Aquí está el boceto de mi diseño.

Cada elemento de almacenamiento (archivo de registro, memoria de datos, AlusourceA, AluSourceB..etc) se define en un módulo separado junto con la funcionalidad para escribir en ese elemento de almacenamiento. Las señales de control y los datos necesarios, la dirección se proporcionan por referencia jerárquica a otros módulos.

Aquí hay un ejemplo de un módulo que explica claramente mi diseño.

     /* top is the main module in this example, all
       modules are instantiated in top module. One or more registers are 
       instantiated in each module which are updated based on the contents 
       of registers in other modules using hierarchical reference*/



     module dat1dat2(input clk,output alusrca,output alusrcb);
     reg [7:0] data1,data2; /*Registers which will be cross referenced in 
                             Alu module*/
     always @(posedge clk)
     begin

     if (top.control_unit_uut.en_dat1dat2 and !alusrcb )
     /*hierarchical reference to a register in a module instantiated in top 
     module*/ 
     begin
     data1<=top.regfile_uut.regfile[top.IR_uut.IR[12:10]];
     data2<=top.IR_uut.IR[6:0];
     end

     elseif (top.control_unit_uut.en_dat1dat2 and alusrcb)


     begin
     data1<=top.regfile_uut.regfile[top.IR_uut.IR[12:10]];
     data2<=top.regfile_uut.regfile[top.IR_uut.IR[9:7]];
     end 
     else
     begin
     data1<=8'hzz;
     data2<=8'hzz;
     end
     end
     assign alusrca=data1;
     assign alusrcb=data2;
     endmodule

¿Es este diseño legal en verilog dado que no tengo que sintetizarlo, solo necesito simularlo? Si la respuesta es no, ¿cuál es el diseño más simple que puedo usar que no es sintetizable necesariamente?

PD: Si algo no está claro acerca de mi pregunta, puedo explicarlo en comentarios o actualizar mi pregunta.

    
pregunta Shadow

1 respuesta

2

Sí, las afirmaciones directas son legales en Verilog. Sin embargo, esta es una muy mala práctica de diseño para diseñar el código RTL principal mediante afirmaciones directas.

Las afirmaciones directas en Verilog se usan generalmente en el entorno de verificación, en bancos de pruebas, para "conectar" algunos estados iniciales y cambiar los parámetros de tiempo, principalmente para acelerar el proceso de verificación. De esta manera, el entorno de verificación no interfiere con la RTL principal durante la depuración.

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas