【问题标题】:syntax error in verilog code ,near "<=": syntax error, unexpected <=,verilog 代码中的语法错误,“<=”附近:语法错误,意外 <=,
【发布时间】:2016-03-02 17:27:12
【问题描述】:

我是verilog的初学者,所以我需要你的帮助。 我想为 2 位 7 段解码器制作一个代码,但这里有一个我无法识别的语法。

代码:

module segment7dec (input [5:0] bin,output [3:0] bcd0,output [3:0] bcd1);


  case (bin)
 6'd0 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0000; end

 6'd1 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0001; end

 6'd2 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0010; end

 6'd3 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0011; end

 6'd4 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0100; end

 6'd5 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0101; end

 6'd6 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0110; end

 6'd7 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0111; end

 6'd8 : begin bcd1 <= 4'b0000; bcd0 <= 4'b1000; end

 6'd9 : begin bcd1 <= 4'b0000; bcd0 <= 4'b1001; end

6'd10 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0000; end

6'd11 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0001; end

6'd12 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0010; end

6'd13 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0011; end

6'd14 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0100; end

6'd15 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0101; end

6'd16 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0110; end

6'd17 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0111; end

6'd18 : begin bcd1 <= 4'b0001; bcd0 <= 4'b1000; end

6'd19 : begin bcd1 <= 4'b0001; bcd0 <= 4'b1001; end

6'd20 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0000; end

6'd21 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0001; end

6'd22 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0010; end

6'd23 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0011; end

6'd24 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0100; end

6'd25 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0101; end

6'd26 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0110; end

6'd27 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0111; end

6'd28 : begin bcd1 <= 4'b0010; bcd0 <= 4'b1000; end

6'd29 : begin bcd1 <= 4'b0010; bcd0 <= 4'b1001; end

6'd30 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0000; end

6'd31 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0001; end

6'd32 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0010; end

6'd33 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0011; end

6'd34 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0100; end

6'd35 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0101; end

6'd36 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0110; end

6'd37 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0111; end

6'd38 : begin bcd1 <= 4'b0011; bcd0 <= 4'b1000; end

6'd39 : begin bcd1 <= 4'b0011; bcd0 <= 4'b1001; end

6'd40 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0000; end

6'd41 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0001; end

6'd42 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0010; end

6'd43 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0011; end

6'd44 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0100; end

6'd45 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0101; end

6'd46 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0110; end

6'd47 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0111; end

6'd48 : begin bcd1 <= 4'b0100; bcd0 <= 4'b1000; end

6'd49 : begin bcd1 <= 4'b0100; bcd0 <= 4'b1001; end

6'd50 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0000; end

6'd51 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0001; end

6'd52 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0010; end

6'd53 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0011; end

6'd54 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0100; end

6'd55 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0101; end

6'd56 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0110; end

6'd57 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0111; end

6'd58 : begin bcd1 <= 4'b0101; bcd0 <= 4'b1000; end

6'd59 : begin bcd1 <= 4'b0101; bcd0 <= 4'b1001; end

6'd60 : begin bcd1 <= 4'b0110; bcd0 <= 4'b0000; end
endcase
  endmodule

报告的错误:

错误:C:/modeltech64_10.1c/examples/decoder1.v(4):靠近“

【问题讨论】:

标签: verilog


【解决方案1】:

有两个主要问题,可以使用assign 将分配给连接或删除为reg 并放置在initialalways 块中。例如:

module segment7dec (
  input  [5:0] bin,
  output reg [3:0] bcd0,  //<-- reg type
  output reg [3:0] bcd1);

触发器驱动的bcd:

 always @(posedge clk) begin
   case (bin)
     6'd0 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0000; end
     6'd1 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0001; end
     //...
   endcase
 end

或者对于组合(注意赋值类型的变化):

 always @* begin
   case (bin)
     6'd0 : begin bcd1 = 4'b0000; bcd0 = 4'b0000; end
     6'd1 : begin bcd1 = 4'b0000; bcd0 = 4'b0001; end
     //...
   endcase
 end

【讨论】:

  • 当您输入答案时,我输入的答案几乎相同。除了我没有发现组合逻辑的非阻塞分配。我花太多时间做 VHDL。
  • 摩根,马修,我现在明白这些错误了,在我得到它之后,它们现在在我看来非常愚蠢:D,非常感谢您的回复。
【解决方案2】:

有两个问题阻止你编译这个:

i) case 语句必须在 always 块内。任何类似的语句(例如if)必须在always 块中。如果您对 always 块的概念不熟悉,则需要了解它们。

always @(*)
case (bin)

ii) 默认情况下,输出是电线。您不能从 always 块中驱动 wire。您只能从 always 块分配给 reg。您的输出都需要是reg

module segment7dec (input [5:0] bin, output reg [3:0] bcd0, output reg [3:0] bcd1);

你在always块中的赋值也应该是“阻塞的”,因为这是组合逻辑:

6'd0 : begin bcd1 = 4'b0000; bcd0 = 4'b0000; end

http://www.edaplayground.com/x/RxS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2012-10-20
    • 2012-09-29
    • 2013-12-11
    • 1970-01-01
    相关资源
    最近更新 更多