verilog中的8 x 1多路复用器,语法错误10170

时间:2012-10-19 23:52:45

标签: verilog quartus

我正在尝试在Verilog中创建一个8 x 1多路复用器。当我运行分析和综合代码时,我不断收到错误。这是我的代码:

// 8 x 1 line multiplexer
module KuchtaClayton_HW7_P6(output  Y, input [2:0] S, input [7:0] I);

    assign Y = (S ==3’b000) ? I[0] :
               (S ==3’b001) ? I[1] :    
               (S ==3’b010) ? I[2] :    
               (S ==3’b011) ? I[3] : 
               (S ==3’b100) ? I[4] :
               (S ==3’b101) ? I[5] :
               (S ==3’b110) ? I[6] :
               (S ==3’b111) ? I[7] : 1’bx;
endmodule

以下是错误消息:

  

错误(10170):KuchtaClayton_HW7_P6.v(6)附近文本“â”的Verilog HDL语法错误;期待“)”

有21个错误基本相同,有些看起来像这样:

  

错误(10170):文本附近KuchtaClayton_HW7_P6.v(6)处的Verilog HDL语法错误â   错误(10170):文本附近KuchtaClayton_HW7_P6.v(6)的Verilog HDL语法错误

我双击它们,它们将我带到每个分配线Y 3次。我猜我在每个布尔表达式中都做了三个错误?我在分配中做错了什么?我使用Quartus II作为我的程序。

1 个答案:

答案 0 :(得分:4)

我只能猜测你在代码中是如何得到字符的,因为输入并不容易(例如在Mac上你需要按住 Shift + 方法 + ] )。无论如何,该字符是Unicode 0xE28099,并不是合法的Verilog代码。您应该使用ASCII字符',即0x07(参见table of ASCII characters)。

除此之外,您的语法还可以。唯一的建议是不要在那里使用1'bx,因为3位可以代表最多8个数字(从0到7),因此你有一个完整的案例,因此可以使用以下代码:

assign Y = (S == 3'd0) ? I[0] :
           (S == 3'd1) ? I[1] :
           (S == 3'd2) ? I[2] :
           (S == 3'd3) ? I[3] :
           (S == 3'd4) ? I[4] :
           (S == 3'd5) ? I[5] :
           (S == 3'd6) ? I[6] : I[7];