verilog - 通过 Verilog 中的别名写入 reg 的位域

标签 verilog

我有一个寄存器:

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_statedout_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_statedout_flag信号应该是reg

reg [2:0] dout_state;
reg dout_flag;

关于verilog - 通过 Verilog 中的别名写入 reg 的位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45518273/

相关文章:

module - 如何运行此代码而不出现语法错误?

verilog - PAD 符号 "r<3>"具有未定义的 IOSTANDARD - Verilog

verilog - 为仿真和综合定义不同的参数值

Verilog 分块分配

verilog - 如何将向量传递给模块而不改变值?

syntax - verilog 模块声明的首选语法

verilog - 如何在verilog中分割长行代码?

audio - 让FPGA使用verilog在 "line out"引脚上输出声音

verilog - 如何在 verilog 中的 "always" block 中使用两个事件

verilog - 如何了解Cadence XMVLOG编译器支持哪些SystemVerilog?