博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于FIR的modelsim
阅读量:5112 次
发布时间:2019-06-13

本文共 3074 字,大约阅读时间需要 10 分钟。

(1)FIR ip核仿真

(2)FIR 多通道应用

(3)多通道fir ip核需要注意的复位问题

=======================================================================

(1)FIR ip核仿真

=======================================================================

关于FIR的modelsim仿真一直困惑着我。今天终于解决了。

在生成IP核时,会生成两个相应的文件夹XX_ip和XX_ip_sim,“XX”表示IP核的命名。在下面的文件夹中,我的IP命名为fir2。

打开XX_ip_sim文件夹,里面有不同仿真工具的支持文件,其中mentor就是modelsim的。把modelsim的仿真路径

修改到mentor文件夹下。仿真路径所调用的文件来自xx_ip_sim文件夹下的文件。当然是可以自己修改的。

打开mentor文件夹,里面就是相应的Tcl文件,不过在我们应用时要做一些修改。把顶层文件修改为自己编写的tb文件。文件

也要入在xx_ip_sim文件夹下。

 

3、在modelsim的tool菜单下选择Tcl,运行msim_setup文件。

4、运行dev_com

5、运行com

6、运行elab_debug

 

如果重新生成了IP核,只需要运行com和elab_debug即可,不需要每次都编译库文件的。

 ==================================================================

(2)FIR多通道仿真应用

===================================================================

IP核的设置如下:

测试脚本如下:

module fir_i2_20m_4ch_4x_tb;

parameter CLK_CYCLE = 4'd10;
reg clk =0;
reg rst =0;
reg [15:0] din1=0;
reg [15:0] din2=0;
reg [15:0] din3=0;
reg [15:0] din4=0;
reg [1:0] cnt =0;
reg [15:0] din =0;
reg in_valid =0;
reg in_sop =0;
reg in_eop =0;
wire [69:0] dout;
wire [34:0] dout_i;
wire [34:0] dout_q;
wire out_chanl;
assign dout_i = dout[34:0];
assign dout_q = dout[69:35];
initial
begin
#0
clk =0;
rst =1;
#(3*CLK_CYCLE)
rst =0;
end
always #(CLK_CYCLE/2) clk = ~clk;
always @( posedge clk )
begin
if( rst )
begin
cnt <= 2'd0;
end
else
begin
cnt <= cnt + 1'b1;
end
end
always @( posedge clk )
begin
if( & cnt )
begin
din1 <= din1 + 1;
din2 <= din2+2;
din3 <= din3;
din4 <= din4;
end
end
always @( posedge clk )
begin
if( rst )
begin
in_valid <= 1'b0;
in_sop <= 1'b0;
in_eop <= 1'b0;
din <= 0;
end
else
begin
case( cnt )
2'd0 :
begin
in_valid <= 1'b1;
in_sop <= 1'b1;
in_eop <= 1'b0;
din <= din1;
end
2'd1 :
begin
in_valid <= 1'b1;
in_sop <= 1'b0;
in_eop <= 1'b0;
din <= din2;
end
2'd2 :
begin
in_valid <= 1'b1;
in_sop <= 1'b0;
in_eop <= 1'b0;
din <= din3;
end
2'd3 :
begin
in_valid <= 1'b1;
in_sop <= 1'b0;
in_eop <= 1'b1;
din <= din4;
end
default:
begin
in_valid <= 1'b0;
in_sop <= 1'b0;
in_eop <= 1'b0;
din <= 0;
end
endcase
end
end
reg [1:0] ast_sink_error= 2'd0;
wire [1:0] ast_source_error;
fir_i2_20m_4ch_4x_ip fir_i2_20m_4ch_4x_ip_inst (
.clk (clk), // clk.clk
.reset_n (~rst), // rst.reset_n
.ast_sink_data (din), // avalon_streaming_sink.data
.ast_sink_valid (in_valid), // .valid
.ast_sink_error (ast_sink_error), // .error
.ast_sink_sop (in_sop), // .startofpacket
.ast_sink_eop (in_eop), // .endofpacket
.ast_source_data (dout), // avalon_streaming_source.data
.ast_source_valid (out_valid), // .valid
.ast_source_error (ast_source_error), // .error
.ast_source_sop (out_sop), // .startofpacket
.ast_source_eop (out_eop), // .endofpacket
.ast_source_channel (out_chanl) // .channel
);

endmodule

在仿真中只给出一通道的信号

 

在仿真中分别给出一,二通道的信号。

 

结论:在四通道插四的仿真中,IP核会把1,2通道分在一起,3,4通道分在一起。out_chanl也只是一位的。

=============================================================================

(3)多通道fir ip核需要注意的复位问题

=============================================================================

在复位状态in_valid不能与in_sop(或in_eop)同时为高,否则在运算中会出现错误。

 

转载于:https://www.cnblogs.com/zhongguo135/p/4116300.html

你可能感兴趣的文章
MyEclipse中Web项目的发布和运行
查看>>
【模板】最短路
查看>>
理解 Lua 的那些坑爹特性
查看>>
Windows WMIC命令使用详解(附实例)
查看>>
如何从Powerdesigner进行数据建模并生成SQL脚本
查看>>
发现微信支付bug
查看>>
MVC过滤器---异常处理过滤器
查看>>
你不知道的常用 代码分析 规范
查看>>
rlwrap
查看>>
断点续传
查看>>
iBatis/MyBatis
查看>>
[python] Queue.Queue vs. collections.deque
查看>>
【转】在HTML中使用Javascript
查看>>
Ext.Net学习笔记23:Ext.Net TabPanel用法详解
查看>>
3.1.6 循环栅栏:CyclicBarrier
查看>>
线程池(1)
查看>>
awk字符提取
查看>>
linux下安装JDK和Tomcat
查看>>
android仿苹果分段按钮
查看>>
Java序列化
查看>>