2017-08-05 50 views
2

别名写入一个reg的位域我有一个寄存器:通过用Verilog

在DOUT位
reg [7:0] dout; //output of memory bus 

组表示类似的有意义的事:

  • 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 

的程序任务失败,因为dout_state和dout_flag是电线。

我希望这些标签能够作为表示dout总线部分的别名工作。

我该如何做到这一点?

回答

1

always块已经驱动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

wire [7:0] dout; //output of memory bus 

由于总是块的,dout_statedout_flag信号应该是reg

reg [2:0] dout_state; 
reg dout_flag;