Quartus 2 verilog 使用大括号设置特定位

Quartus 2 verliog using curly craces to set particular bits

您好,我是 verilog 的新手,我尝试将一些特定位从一个 reg 变量设置到另一个 reg,但它对我不起作用。我究竟做错了什么?

reg [31:0] a;
reg [31:0] b;

initial begin
 a =32'b0;
 b =32'b1;
 $display("current value of a = %32b ",a);
 a ={b[5:0]};
 $display("value of a %32b ",a);
 #10 $finish;
 end

从a[0]到a[5]的a​​位应该是1但是只有a[0]变成了1

在你的代码中 b = 32'b1 产生 {31{1'b0},1'b1},所以只有 b[0] 等于一。

在 SystemVerilog(检查:IEEE1800-2012, 5.7.1 Integer literal constants)中,您可以使用单位值使用常量文字数字的自动左填充,即 b = '1b 的所有位设置为一.

使用 Verilog,只需将另一个值分配给 b(即 b = 32'b11111)或将您的代码更改为以下内容:

a[4:0] = {5{b[0]}}