- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
RAM的实验
RAM的实验
实验目的
了解通过Quartus调用Modelsim的方法,利用Modelsim仿真Quartus中的程序。
实验内容
用Quartus调用Modelsim完成门级仿真和RTL仿真
代码分析
本程序让计数器包含一个时钟使能,同时时钟使能出现的间隔变化,并用一个可变模(计数最大值 + 1)的计数器,改变它的模,然后把进位输出作为时钟使能。
在主模块中首先定义了所有的输入输出接口和线。
module filter_tb(
ClkEn,
clk_50M,
FreqWord,
Phase,
dds_out,
filter_out
);
input ClkEn;
input clk_50M;
input [23:0] FreqWord;
input [23:0] Phase;
output [11:0] dds_out;
output [11:0] filter_out;
wire SYNTHESIZED_WIRE_0;
wire [11:0] SYNTHESIZED_WIRE_1;
assign dds_out = SYNTHESIZED_WIRE_1;
assign SYNTHESIZED_WIRE_0 = 0;
然后调用dds模块和FIR_Hamming_13Taps_LP_0d250模块
dds b2v_inst(
.Clock(clk_50M),
.ClkEn(ClkEn),
.FreqWord(FreqWord),
.PhaseShift(Phase),
.Out(SYNTHESIZED_WIRE_1));
defparam b2v_inst.DATA_W = 12;
defparam b2v_inst.PHASE_W = 24;
defparam b2v_inst.TABLE_AW = 12;
FIR_Hamming_13Taps_LP_0d250 b2v_inst1(
.Clock(clk_50M),
.ClkEn(ClkEn),
.AsyncRst(SYNTHESIZED_WIRE_0),
.In(SYNTHESIZED_WIRE_1),
.Out(filter_out));
dds模块中同样先定义了所有的输入输出接口:
module dds
#( parameter PHASE_W = 24,
parameter DATA_W = 16,
parameter TABLE_AW = 12
)
( input [PHASE_W - 1 : 0] FreqWord,
input [PHASE_W - 1 : 0] PhaseShift,
input Clock,
input ClkEn,
output signed [DATA_W - 1 : 0] Out
) ;
reg signed [DATA_W - 1 : 0] sinTable[2 ** TABLE_AW - 1 : 0]; // Sine table ROM
reg [PHASE_W - 1 : 0] phase; // Phase Accumulater
wire [PHASE_W - 1 : 0] addr = phase + PhaseShift; // Phase Shift
assign Out = sinTable[addr[PHASE_W - 1 : PHASE_W - TABLE_AW]]; // Look up the table
然后用SineTable.dat文件对sineTable进行初始化,并把FreqWord作为可变模
initial begin
phase = 0;
$readmemh(SineTable.dat, sinTable); // Initialize the ROM
end
always@(posedge Clock) begin
if(ClkEn)
phase = phase + FreqWord;
end
endmodule
实验步骤
新建一个工程,设置工程目录、工程名和顶层模块名
选择已有文件,将两个设计文件复制到工程目录下,然后选择它们
选择器件
选择第三方工具,这里将第三方仿真工具设置为ModelSim-AE
Assignments - Device中,Device and Pin Option中,Voltage标签,修改默认IO电平
Dual-Purpose Pins标签
Unused Pins标签,未使用的Pin设置为输入
新建顶层文件
为两个verilog文件创建原理图符号,在原理图文件中添加它们
文档评论(0)