System verilog 在SystemVerilog中,首先执行哪个程序块?
如果我在一个模块中既有alwas\u comb又有always\u ff,那么哪一个先执行 例如,我在一本书中看到了这段代码,但我对其功能感到困惑。例如,如果我们=0,Qout的值是多少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将被写入内存的
模块同步#(参数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