我在Verilog中编写了一个移位/添加乘法器,通过在线编译器编译时没有错误,但是当我尝试使用iverilog通过CMD窗口编译它时,我收到以下错误:
shiftadd.v:1:错误:不匹配的字符(十六进制U + 019E)
(U + 019E是我能找到的最接近的unicode字符)。我的代码中有什么导致此错误?我不是要传递任何十六进制值。
module shiftaddmult(product, multiplicand, multiplier, clk);
input clk;
output reg [63:0] product;
input [63:0] multiplicand;
input [31:0] multiplier;
integer i;
always @(posedge clk) //m or m
begin
if(i< 32)
begin
product[63:32] = 16'b0000_0000_0000_0000;
product[32:16] = multiplier;
if(product[0] == 1)
begin
product[63:32] = product[63:32] + multiplicand;
product [63:0] = product[63:1];
end
else
begin
product [63:0] = product[63:1];
end
i = i + 1;
end
end //end always
endmodule //shift add
module tester(output reg [63:0] product,
output reg [63:0] multiplicand,
output reg [31:0] multiplier,
output reg clk,
output reg i);
initial
begin
i = 0;
clk = 0;
$dumpfile("multdump.dat");
$dumpvars;
#10 multiplier = 16'b0000_0000_0000_0001;
multiplicand = 16'b0000_0000_0000_0010;
//result should = 2
#20 multiplier = 16'b0000_0000_0000_0010;
multiplicand = 16'b0000_0000_0000_0100;
//result should = 'd8
#30 multiplier = 16'b0000_0000_0000_1000;
multiplicand = 16'b0000_0000_0000_1000;
//result should = 'd16
#40 $finish;
end
always begin
#5 clk = ~clk; //clock generator
end
endmodule
module testbench;
wire [63:0] product;
wire [63:0] multiplicand;
wire [31:0] multiplier;
wire i;
wire clk;
tester test(product, multiplicand, multiplier, clk, i);
shiftaddmult mult(product, multiplicand, multiplier, clk);
endmodule
答案 0 :(得分:0)
看起来您正在从浏览器复制代码并将其粘贴到源代码中。从浏览器复制代码也会复制编译器无法检测到的一些特殊字符。 我建议你再写代码不要复制粘贴。只需使用键盘再次写入这些行。 这应该可以工作并消除不需要的字符。