【发布时间】:2014-01-21 00:16:45
【问题描述】:
我想接受一个参数并将与该参数相等的零个数分配给一个常数,并使用该常数进行比较。我该怎么做 ?
比如说参数是3,我想创建一个常量
n=3'b000;
并在另一个语句中使用这个 n。唯一的问题是,我不知道。如何初始化“n”个零以及将其分配给什么 verilog 数据类型?
【问题讨论】:
标签: verilog
我想接受一个参数并将与该参数相等的零个数分配给一个常数,并使用该常数进行比较。我该怎么做 ?
比如说参数是3,我想创建一个常量
n=3'b000;
并在另一个语句中使用这个 n。唯一的问题是,我不知道。如何初始化“n”个零以及将其分配给什么 verilog 数据类型?
【问题讨论】:
标签: verilog
您正在寻找复制运算符。语法是{replication_constant{value}}。
创建大小为WIDTH 到全零的总线的示例。
parameter WIDTH = 3;
wire [WIDTH-1:0] n = {WIDTH{1'b0}};
有关复制运算符的完整描述,请参阅IEEE std 1800-2012 § 11.4.12.1 “复制运算符”
【讨论】:
'0) 用于 SystemVerilog,SO 的问题用于 Verilog。
1'b0 替换为您想要的任何值,例如将 1'b1 替换为全 1。 SV 具有填充值 '0,'1,'x,'z(不区分大小写)。
扩展 Gregs 的答案并回答如果你想要 1 然后全是 0。
混合使用串联{a,b} 和复制{width{c}}:
wire [WIDTH-1:0] n = { 1'b1, {WIDTH-1{1'b0}} } ;
在 SystemVerilog 中使用 '0 或 '1 语法时,'b0 用于宽度匹配在旧版 Verilog 中有效。在 verilog-95 中,它最多只能匹配 32 位的宽度,但此后已被纠正。
在触发器上定义复位值的示例:
reg [7:0] a;
always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin
a <= 'b0 ;
...
【讨论】: