如果我不知道大小,我如何取消系统verilog中的寄存器? 例如,如果我有:如何取消系统verilog中的寄存器
reg [DATA_WIDTH-1:0] data_stack;
与给予模块的一些参数DATA_WIDTH
。是否可以给寄存器data_stack
分配一个零?
请注意,初始化一个类似的reg
为零就足够了,因为我可以简单地执行按位和两者之间的操作并取消data_stack
。
此外,任何推荐的网站,我可以学习这些东西?谷歌搜索只让我有点贫血的网站。
如果我不知道大小,我如何取消系统verilog中的寄存器? 例如,如果我有:如何取消系统verilog中的寄存器
reg [DATA_WIDTH-1:0] data_stack;
与给予模块的一些参数DATA_WIDTH
。是否可以给寄存器data_stack
分配一个零?
请注意,初始化一个类似的reg
为零就足够了,因为我可以简单地执行按位和两者之间的操作并取消data_stack
。
此外,任何推荐的网站,我可以学习这些东西?谷歌搜索只让我有点贫血的网站。
如果我理解你的问题,你想知道如何产生一个与data_stack
相同的宽度的零值?
在这种情况下,使用复制操作符:
data_stack = {DATA_WIDTH{1'b0}};
这产生DATA_WIDTH
数量的零。
IEEE Std 1800-2009是黄金参考。以下将所有位设置为0:
data_stack = '0;
请参阅“整数文字常量”一节。
一种未施胶单比特值可以由 单位值与一个撇号(')前述被指定,但没有碱 说明符。未分级值的所有位应设置为指定位的值 。在自我确定的情况下,未分级的单比特值应具有1比特的宽度,并且该值将被视为无符号的 。
我认为如果您搜索初始化寄存器而不是无效,您的搜索会产生更好的结果。
如果这是一个测试平台变量然后只是:
initial begin
data_stack = {DATA_WIDTH{1'b0}};
end
如果是在一个触发器中使用,你需要重新设置:
always @(posedge clk or negedge reset_n) begin
if (~reset_n) begin
data_stack <= {DATA_WIDTH{1'b0}};
end
else begin
//<=nextvalue;
end
end
是否有可能包括一个片段那运营商究竟是什么?我从来没有见过它,我很好奇它的意思,但AFAIK这不是一个公开可查看的文件。 – Tim 2013-03-14 19:06:04
1800-2012 Std现在免费,但我怀疑任何工具都支持它。 – toolic 2013-03-14 19:07:08
旧的verilog实现有一个问题,这只能工作到32位。用这种方式分配的33位寄存器在MSB中有x。 – Morgan 2013-03-14 19:11:29