我有一个寄存器:
reg [7:0] dout; //output of memory bus
dout 中的位组代表一些有意义的内容,例如:
- dout[2:0] 是一个状态
- dout[3] 是一个标志
- dout[7:4] 是一些数据
我想从always语句中读取和写入该寄存器dout。我想用这些标签来解决这个问题。 这个例子传达了我的尝试:
reg [7:0] dout; //output of memory bus
wire [2:0] dout_state;
wire dout_flag;
wire [3:0] dout_data;
//alias labels
assign dout_state[2:0] = dout[2:0];
assign dout_flag = dout[3];
assign dout_data = dout[7:4];
always(@posedge clk) begin
dout_state <= 3'b1;
dout_flag <= 1'b1;
end
程序分配失败,因为 doout_state 和 doout_flag 是连线。
我希望这些标签作为代表 doout 总线部分的别名。
我怎样才能实现这个目标?
最佳答案
always block 已经驱动了 dout_state
和 dout_flag
信号,因此其他分配应该相反。您当前的代码永远不会驱动 dout
。
//alias labels
assign dout[2:0] = dout_state;
assign dout[3] = dout_flag;
assign dout[7:4] = dout_data;
现在信号定义也应该更新。如果 dout
是端口,则应删除 reg
定义。如果不是,它应该是电线
。
wire [7:0] dout; //output of memory bus
由于always block ,dout_state
和dout_flag
信号应该是reg
。
reg [2:0] dout_state;
reg dout_flag;
关于verilog - 通过 Verilog 中的别名写入 reg 的位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45518273/