Verilog 16位行波进位加法器测试台报错:字符串缺失闭合引号
问题排查与修正方案
核心错误点分析
你的测试台代码存在3个关键问题引发报错:
- 字符串跨行未正确闭合:Verilog要求字符串常量必须用一对双引号完整包裹,你把
$monitor的输出字符串拆成多行后,每行的引号都没正确闭合,直接触发「Missing close quote of string」错误。 - 格式符书写错误:
B=&b里的&是位与运算符,应该改成%b(二进制输出格式符)Cout=%cout是无效格式符,cout是1位二进制信号,要用%b匹配
- 语法错误连锁反应:前面的字符串格式错误让编译器无法正确识别后续语句,进而报「malformed statement」
修正后的$monitor代码片段
如果想简洁写在一行:
initial $monitor("time= %0t, A=%b, B=%b, Cin=%b : Sum=%b, Cout=%b", $time, a, b, cin, sum, cout);
如果要保持换行可读性,用字符串连接符{}拼接每行:
initial $monitor({ "time= %0t, ", "A=%b, ", "B=%b, ", "Cin=%b : ", "Sum=%b, ", "Cout=%b" }, $time, a, b, cin, sum, cout);
额外优化提示
- 给
$time加%0t格式符可避免输出多余前导空格,时间显示更整洁 - 你测试向量里的
b=16'b000000000001100只有13位,改成16'b0000000000001100才符合16位宽度,避免仿真时隐式截断
完整修正后的测试台代码
`timescale 1ns / 1ps module ripple_carry_16_bit_tb; wire [15:0] sum;//output wire cout;//output reg [15:0] a,b;//input reg cin;//input ripple_carry_16_bit uut( .a(a), .b(b), .cin(cin), .sum(sum), .cout(cout)); initial begin $display($time, " << Starting the Simulation >>"); a=0; b=0; cin=0; #100 a= 16'b0000000000011111; b=16'b0000000000001100; cin=1'b0; #10 a= 16'b0000000000011111; b=16'b0000000000001100; cin=1'b0; #10 a= 16'b1100011000011111; b=16'b0000001100001100; cin=1'b1; #10 a= 16'b1111111111111111; b=16'b0000000000000000; cin=1'b1; end initial $monitor("time= %0t, A=%b, B=%b, Cin=%b : Sum=%b, Cout=%b", $time, a, b, cin, sum, cout); endmodule
内容的提问来源于stack exchange,提问作者Jak
相关产品推荐
相关产品推荐

