写入reg';通过Verilog中的别名设置s位字段

写入reg';通过Verilog中的别名设置s位字段,verilog,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

我有一本登记册:

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
reg[7:0]dout//内存总线的输出
导线[2:0]双稳态;
线斗旗;
导线[3:0]双端数据;
//别名标签
分配dout_状态[2:0]=dout[2:0];
分配dout_标志=dout[3];
分配dout_数据=dout[7:4];
始终(@posedge clk)开始

dout_状态always块已经驱动了
dout_状态
dout_标志
信号,因此其他分配应该颠倒。您当前的代码从不驱动
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块,
dout_状态
dout_标志
信号应为
reg

reg [2:0] dout_state;
reg dout_flag;