【问题标题】:Verilog HDL syntax errorVerilog HDL 语法错误
【发布时间】:2018-12-13 15:06:00
【问题描述】:

大家,只是一个关于如何修复以下 Verilog 代码的快速问题,我不断收到错误消息。有什么建议吗?

module bcd_to_seven_seg( B, S);

input wire [3:0]B;
output wire [6:0]S;

reg [6:0] rS;
assign S = rS;

always @(B)
begin
  case({B})
  4'b0000: rS= 7b'1000000;
  4'b0001: rS= 7b'1111001;
  4'b0010: rS= 7b'0100100;
  4'b0011: rS= 7b'0110000;
  4'b0100: rS= 7b'0011001;
  4'b0101: rS= 7b'0010010;
  4'b0110: rS= 7b'0000010;
  4'b0111: rS= 7b'1111000;
  4'b1000: rS= 7b'0000000;
  4'b1001: rS= 7b'0010000;
  endcase

end

endmodule

这里是错误

Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(32) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(33) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(34) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(35) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(36) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(37) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(38) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(39) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(40) near text "b";  expecting ";"  
Error (10170): Verilog HDL syntax error at bcd_to_seven_seg.v(41) near text "b";  expecting ";"  
Error: Quartus II 64-Bit Analysis & Synthesis was unsuccessful. 10 errors, 0 warnings  
  Error: Peak virtual memory: 556 megabytes  
  Error: Processing ended: Sun Nov 12 11:24:28 2017  
  Error: Elapsed time: 00:00:01  
  Error: Total CPU time (on all processors): 00:00:01

【问题讨论】:

  • 你应该使用7'b而不是7b'
  • 呃,这真是一个愚蠢的错误。

标签: verilog fpga


【解决方案1】:
7'b0010001

7' 表示七位数字

b 表示你使用的是二进制

0010001 是你的号码

我们都犯过同样的错误

【讨论】:

    【解决方案2】:

    我已经重写了您的代码,并在您的代码有问题的地方添加了 cmets。在建模组合逻辑时请小心,因为您的代码编写方式可能会推断出锁存器,因为 case 语句没有默认语句。 我已经将默认大小写为 x,您可以根据需要对其进行编辑。

    module bcd_to_seven_seg( B, S);
    
    input wire [3:0]B;
    output wire [6:0]S;
    
    reg [6:0] rS;
    assign S = rS;
    
    always @(*)                 //Model combinational blocks as always@(*)to avoid latch
    begin                       
    case(B)                      //Concantenation operator {} not needed
      4'b0000: rS= 7'b1000000;   //Use 7'b instead of 7b'
      4'b0001: rS= 7'b1111001;
      4'b0010: rS= 7'b0100100;
      4'b0011: rS= 7'b0110000;
      4'b0100: rS= 7'b0011001;
      4'b0101: rS= 7'b0010010;
      4'b0110: rS= 7'b0000010;
      4'b0111: rS= 7'b1111000;
      4'b1000: rS= 7'b0000000;
      4'b1001: rS= 7'b0010000;
      default: rs= 7'dx;          //Use default statement else a latch may get inferred
    endcase
    
    end
    
    endmodule
    

    【讨论】:

    • 不鼓励使用纯代码的答案。请单击编辑并添加一些词来总结您的代码如何解决问题,或者解释您的答案与之前的答案/答案有何不同。谢谢
    【解决方案3】:

    应该是 7'b 而不是 7b。

    rS = 7'b1000000;

    【讨论】:

    • 感谢您的帮助!但这并没有给现有答案增加太多内容?
    【解决方案4】:

    语法错误 放在位数之后,即:7 在上述情况下不在“b”之后(表示二进制数)

    例如:7'b0000000; 7'b1100100;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多