Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
Filter Verilog代码:FIR滤波器=用于从文件读取系数值的RAM建模。。不显示模拟结果_Filter_Verilog_Ram_Coefficients - Fatal编程技术网

Filter Verilog代码:FIR滤波器=用于从文件读取系数值的RAM建模。。不显示模拟结果

Filter Verilog代码:FIR滤波器=用于从文件读取系数值的RAM建模。。不显示模拟结果,filter,verilog,ram,coefficients,Filter,Verilog,Ram,Coefficients,在verilog中,仅此代码行显示其模拟输出 #( parameter width=8, length=16 ) (* ram_style = "block" *) reg [(2*width)-1:0] mem[(1<<length)-1:0]; (一) #(参数宽度=1,长度=16) (*ram_style=“block”*) reg[(宽度)-1:0]mem[(1一个RAM模型可能看起来像下面的代码,写入它只是对wr_addr、wr_data和wr

在verilog中,仅此代码行显示其模拟输出

  #( parameter width=8, length=16 )
   (* ram_style = "block" *)
         reg [(2*width)-1:0] mem[(1<<length)-1:0];
(一)

#(参数宽度=1,长度=16)
(*ram_style=“block”*)

reg[(宽度)-1:0]mem[(1一个RAM模型可能看起来像下面的代码,写入它只是对wr_addr、wr_data和wr_en进行排序的问题

module ram #(
  parameter DATA_W = 8,
  parameter DATA_D = 256
) (
  input                      clk,
  input                     rst_an,
  input  [0:$clog2(DATA_D)] rd_addr,
  input  [0:$clog2(DATA_D)] wr_addr,
  input  [0:DATA_W-1]       wr_data,
  input                     wr_en,
  output [0:DATA_W-1]       rd_data
);

reg [0:DATA_W-1] ram_data [0:DATA_D-1];

//READ
always @* begin
  rd_data = ram_data[rd_addr];
end

//WRITE
always @(posedge clk, negedge rst_an) begin
  if (~rst_an) begin
    for(int i = 0; i<DATA_D ; i++) begin
      ram_data[i]     <= 'b0 ;
    end 
  end
  else begin
    if (wr_en) begin
      ram_data[wr_addr] <= wr_data ;
    end
  end
end
clog2:用于获取给定深度所需的地址宽度

如果你想要深度为4,你需要2位来寻址。深度为16,4位来寻址,即

log2( 4) => 2
log2(16) => 4 
如果使用非二次幂,则要将其取整或上限

log2(5)  => 2.32192809489
clog2(5) => 3

因此,clog2从RAM的深度获得所需的寻址宽度是非常有用的。

对于内存的宽度和深度,更常见的做法是:
reg[(宽度-1):0]mem[0:(深度-1)];
ya但我想要65535的深度和8位宽。那么如何编码?
reg[(8-1):0]mem[0:(65535-1)];
用您指定的值替换宽度和深度。verilog也支持
$clog2
吗?不,但您可以将其作为函数添加,应该在internet上的某个地方…为什么使用$clog2?@sugureshkumararari如果您想要深度为4,则需要2位来寻址。深度为16,寻址为4位。
log2(4)=>2
log2(16)=>4
如果使用非二次幂,则要将
log2(5)=>2.32192809489
clog2(5)=>3
进行比较。
log2( 4) => 2
log2(16) => 4 
log2(5)  => 2.32192809489
clog2(5) => 3