File 在verilog中加载初始值的可合成方法
我想写一个模块,使用从文件加载的一些系数 例如:File 在verilog中加载初始值的可合成方法,file,verilog,synthesis,File,Verilog,Synthesis,我想写一个模块,使用从文件加载的一些系数 例如: reg [3:0] coeffs[0:1]; reg [6:0] ans; always @(posedge clk) begin if (!reset) begin coeffs[0] <= 3; coeffs[1] <= 2; ans <= 0; end else begin ans <= coeff
reg [3:0] coeffs[0:1];
reg [6:0] ans;
always @(posedge clk) begin
if (!reset) begin
coeffs[0] <= 3;
coeffs[1] <= 2;
ans <= 0;
end
else begin
ans <= coeffs[0] * coeffs[1];
end
end
reg[3:0]系数[0:1];
reg[6:0]ans;
始终@(posedge clk)开始
如果(!重置)开始
coefs[0]这里有一个建议:将初始化数组的语句coefs
放在include文件中,例如
系数五:
coefs[0]我很乐意接受更正,但除了“欺骗”(包括文件、定义文件、在合成前运行生成此类代码的脚本)之外,我不知道有任何方法可以从文件加载纯数字进行合成。
我承认这是一个有待解决的问题
如果只是为了防止当你的芯片从制造商那里回来时,你发现启动rom是完全空的,那么你会很尴尬。。。。就像在我工作的地方(转眼)一样,修复只需要一次(接触)层更改,但较低层的遮罩是最昂贵的)。使用参数传递初始值是更好的选择
module A
#( parameter INITIAL_VALUE_COEFFS_0 = 3,
parameter INITIAL_VALUE_COEFFS_1 = 2)
( /* ignore it */ );
reg [3:0] coeffs[0:1];
reg [6:0] ans;
always @(posedge clk) begin
if (!reset) begin
coeffs[0] <= INITIAL_VALUE_COEFFS_0;
coeffs[1] <= INITIAL_VALUE_COEFFS_1;
ans <= 0;
end
else begin
ans <= coeffs[0] * coeffs[1];
end
end
endmodule
模块A
#(参数初始值系数=3,
参数初始值系数(1=2)
(/*忽略它*/);
注册[3:0]系数[0:1];
reg[6:0]ans;
始终@(posedge clk)开始
如果(!重置)开始
系数[0]我认为使用参数对我来说不是一个好的选择,因为我希望保持系数的数量作为变量。这意味着我将使用一个参数来表示系数的数量,我将使用一个generate块来声明和使用系数。没有办法做到这一点,也无法通过参数传递系数的值,对吗?在代码中使用include文件是不好的。这是因为如果模块多次实例化,除了复制模块外,您无法找到其他方法应用不同的初始值。问题是我希望有一个通用模块,接收文件名、系数数量和宽度作为参数的。如何以这种方式使用include文件?
reg [3:0] coeffs[0:1];
reg [6:0] ans;
always @(posedge clk) begin
if (!reset) begin
`include "coeffs.v"
ans <= 0;
end
else begin
ans <= coeffs[0] * coeffs[1];
end
end
module A
#( parameter INITIAL_VALUE_COEFFS_0 = 3,
parameter INITIAL_VALUE_COEFFS_1 = 2)
( /* ignore it */ );
reg [3:0] coeffs[0:1];
reg [6:0] ans;
always @(posedge clk) begin
if (!reset) begin
coeffs[0] <= INITIAL_VALUE_COEFFS_0;
coeffs[1] <= INITIAL_VALUE_COEFFS_1;
ans <= 0;
end
else begin
ans <= coeffs[0] * coeffs[1];
end
end
endmodule