我对verilog有些新意,我有一个令我困惑的问题。我有一些常数参数,特别是近1023个c0,c1,c2 ….. c1022,每一个都是10位…
Verilog模拟器将执行您提供的任何法律语法 该工具不知道实现最终的样子。由您来为合成工具提供时序约束,并告诉您它是否适合逻辑以满足约束(或者您可能必须运行另一个工具以查看它是否满足时序约束)。
因为您命名了参数 c0, c1, c2, ... ,你不妨把它们命名 czero, cone, ctwo, ... 这使您无法选择快捷方式。
c0, c1, c2, ...
czero, cone, ctwo, ...
如果您的工具支持SystemVerilog,您可以将参数编写为数组,然后使用array xor reduction运算符
parameter [9:0] C[1023] = {10'h123, 10'h234, ...}; assign out = C.xor() with (item*r[item.index]);
如果您的综合工具不支持此SystemVerilog语法,则可以将参数值打包到单个向量中,并使用Verilog中的索引部分选择。
parameter [10220-1:0] C = {10'h123, 10'h234, ...}; function [9:0] xor_reduction (input [1022:0] r); integer I; begin xor_reduction = 0; for(I=0;I<1023;I=I+1) xor_reduction = xor_refuction ^ (r[1022-I]*C[I-:10]); end endfunction assign out = xor_reduction(r);