System verilog 在SystemVerilog中,首先执行哪个程序块?

System verilog 在SystemVerilog中,首先执行哪个程序块?,system-verilog,procedural,System Verilog,Procedural,如果我在一个模块中既有alwas\u comb又有always\u ff,那么哪一个先执行 例如,我在一本书中看到了这段代码,但我对其功能感到困惑。例如,如果我们=0,Qout的值是多少 模块同步#(参数M=4,N=8)(输出逻辑[N-1:0]Qout, 输入逻辑[M-1:0]地址,输入逻辑[N-1:0]数据,输入逻辑clk,WE); 逻辑[N-1:0]mem[0:(1您的问题的具体答案是Qout将只跟踪mem[Address]的值。换句话说,在时钟的上升沿,如果WE为0,Qout将被写入内存的

如果我在一个模块中既有alwas\u comb又有always\u ff,那么哪一个先执行

例如,我在一本书中看到了这段代码,但我对其功能感到困惑。例如,如果我们=0,Qout的值是多少

模块同步#(参数M=4,N=8)(输出逻辑[N-1:0]Qout,
输入逻辑[M-1:0]地址,输入逻辑[N-1:0]数据,输入逻辑clk,WE);

逻辑[N-1:0]mem[0:(1您的问题的具体答案是
Qout
将只跟踪
mem[Address]的值
。换句话说,在时钟的上升沿,如果
WE
为0,
Qout
将被写入内存的值驱动。这是因为内存的行为类似于一组触发器,而
Qout
输出的行为就好像它直接连接到一组触发器的Q输出一样


两个
始终
块的执行顺序是确定的,因为
Qout
是使用块分配(
=
)驱动的,而内存是使用非块分配写入的(
您的问题的具体答案是
Qout
将只跟踪
mem的值[地址]
。换句话说,在时钟的上升沿,如果
WE
为0,
Qout
将被写入内存的值驱动。这是因为内存的行为类似于一组触发器,而
Qout
输出的行为就好像它直接连接到一组触发器的Q输出一样


两个
始终
块的执行顺序是确定的,因为
Qout
是使用块赋值(
=
)驱动的,而内存是使用非块赋值写入的(
如果我理解正确,感谢您的回答,当我们=0时,Qout保留上一个值和mem>)[Address]将被更新。然后在下一个时钟周期中,更新的mem[Address]将被分配给WE=0或WE=1的Qout。是这样吗right@user42037对不起,我在胡说八道。(一定是早上太早了。)我已经编辑了我的答案。如果我理解正确,谢谢你的回答。当我们=0时,Qout保留上一个值,mem[地址]将被更新。然后在下一个时钟周期,更新的mem[地址]将被分配给Qout,因为我们=0或我们=1。是这样吗right@user42037对不起,我在胡说八道。(一定是早上太早了。)我已经编辑了我的答案。
module SyncRAM #(parameter M = 4, N = 8)(output logic [N-1:0] Qout,
   input logic [M-1:0] Address, input logic [N-1:0] Data, input logic clk, WE);

logic [N-1:0] mem [0:(1<<M)-1];

always_comb
  Qout = mem[Address];

always_ff @(posedge clk)
  if (~WE)
    mem[Address] <= Data;

endmodule