Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 在verilog中加载初始值的可合成方法_File_Verilog_Synthesis - Fatal编程技术网

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