我不知道可以在 Verilog 中使用的#pragma
或类似的东西(类似于C 语言)。#pragma argsused
例如,赛灵思 ISE 有一个称为“消息过滤”的功能,它允许设计人员静音特定的警告消息。你找到它们一次,选择它们,选择忽略,随后的合成不会触发那些警告。
也许您可以以不需要“浪费”连接的方式设计多路复用器(尽管实际上并未浪费,因为合成器将从网表中删除未使用的连接)。更优雅的解决方案是使用参数化模块,并以所需的宽度对其进行实例化。像这样的东西:
module mux #(parameter WIDTH=32) (
input wire [WIDTH-1:0] a,
input wire [WIDTH-1:0] b,
input wire sel,
output wire [WIDTH-1:0] o
);
assign o = (sel==1'b0)? a : b;
endmodule
这个模块已经用这个简单的测试台进行了测试,它向您展示了如何使用参数实例化一个模块:
module tb;
reg [31:0] a1,b1;
reg sel;
wire [31:0] o1;
reg [4:0] a2,b2;
wire [4:0] o2;
mux #(32) mux32 (a1,b1,sel,o1);
mux #(5) mux5 (a2,b2,sel,o2);
// Best way to instantiate them:
// mux #(.WIDTH(32)) mux32 (.a(a1),.b(b1),.sel(sel),o(o1));
// mux #(.WIDTH(5)) mux5 (.a(a2),.b(b2),.sel(sel),.o(o2));
initial begin
$dumpfile ("dump.vcd");
$dumpvars (1, tb);
a1 = 32'h01234567;
b1 = 32'h89ABCDEF;
a2 = 5'b11111;
b2 = 5'b00000;
repeat (4) begin
sel = 1'b0;
#10;
sel = 1'b1;
#10;
end
end
endmodule
您可以使用此 Eda Playground 链接自行测试:
http ://www.edaplayground.com/x/Pkz