(Verilog)分配给案例块中的LED的问题

时间:2015-01-19 00:54:23

标签: case variable-assignment verilog

当我输入这样的内容时:

always @* begin
    case(SW[17])
        1'b0: assign LEDG = SW[7:0];
        1'b1: assign LEDG = SW[15:8];
    endcase
end

其中LEDG设置为[7:0]绿色LED,我收到错误:

  

错误(10137):Verilog HDL程序分配错误   part2.v(20):object" LEDG"在任务的左侧必须有一个   可变数据类型

试图编译。但是,当我在case块之外放置一个类似的赋值语句时,例如:

assign LEDG = SW[7:0];

它分配得很好。我似乎无法弄清楚这个问题。

(如果解决方案很明显,我很抱歉,我对Verilog来说很新。)

3 个答案:

答案 0 :(得分:1)

我的猜测是你宣布LEDG为

wire [7:0] LEDG;

将其更改为

reg [7:0] rLEDG;
wire [7:0] LEDG;
assign LEDG = rLEDG;

您的始终阻止现在应该分配rLEDG。

基本上,总是块不能分配给电线,只能注册。另一方面,分配语句,分配给不是regs的电线。

答案 1 :(得分:0)

分配语句不能在always块中使用。删除'分配'从线路改变你的输出[7:0] LEDG'阵列到'输出reg [7:0] LEDG' 。必须在always块内使用reg数据类型。

答案 2 :(得分:0)

使用类似的分配,你很可能没有做到你期望的。有关您目前正在做的事情的说明,请参阅using-a-continous-assignment-in-a-verilog-procedure

要在DJZygotes答案中进行扩展,对于wireassign块中的分配,LEDG必须为reg alwaysinitial

wire [7:0] LEDG;
assign LEDG = SW[7:0];

或者:

reg [7:0] LEDG;
always @* begin
  case(SW[17])
    1'b0: LEDG = SW[7:0];
    1'b1: LEDG = SW[15:8];
  endcase
end