- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FPGA实验2 双口RAM的仿真与综合
实验题目 双口RAM的仿真与综合
实验内容
写出双口RAM的设计模块以及激励,并对它进行仿真与综合;
双口RAM的端口有写时钟控制端口wr_clk、写始能端口wr_en、数据输入端口data_in、写地址端口wr_addr、读时钟端口rd_clk、读始能端口rd_en、读地址端口rd_addr以及输出端口data_out;
进一步熟悉QuartusII软件和modelsim软件的功能及环境。
学会使用modelsim软件进行前仿真,使用QuartusII软件进行综合进而在modelsim软件环境下进行后仿真。
详细设计
设计步骤如下:
设计一个双口RAM,有写时钟控制端口wr_clk、写始能端口wr_en、数据输入端口data_in、写地址端口wr_addr、读时钟端口rd_clk、读始能端口rd_en、读地址端口rd_addr以及输出端口data_out;
编译,查找错误,进入仿真环境进行前仿真;
在QuartusII软件环境下进行综合,得出布线图;
在modelsim软件环境下进行后仿真。
根据仿真结果分析,最后得出结论。
仿真结果
前仿真的结果如下:
由仿真结果可得出双口RAM,有写时钟控制端口wr_clk、写始能端口wr_en、数据输入端口data_in、写地址端口wr_addr、读时钟端口rd_clk、读始能端口rd_en、读地址端口rd_addr以及输出端口data_out。开始在没有数据输入时,输出数据为不确定态。接下来给出地址依据地址寻找数据,在写始能端有效时写入数据并在读始能有效时才读出数据,及输出数据。
后仿真结果如下:
经过综合得出后仿真结果可以得出输出数据存在一定的时延,数据在输出时必须经过一定时间后才能有稳定的输出,可见前仿真比较稳定,后仿真有延时,更接近实际。
(3)查看设计对应的寄存器传输级视图:
(4)在modelsim环境下仿真时的芯片图如下:
此图为地址为3时写入数据34,并读出数据为34的电路仿真图
(5)仿真线路图以及展开设计对应的寄存器传输级视图
四、 调试情况,设计技巧及体会
通过本次实验我更加熟悉了利用verilo语言来描述电路,同时熟悉了利用软件仿真电路的逻辑功能并进行验证和分析。使我对QuartusII有了初步的了解,同时让我了解到硬件可以用软件来完成,此软件的模拟仿真给我们学习数字电路有很大的帮助,形象的表达了信号的输出。通过本次实验,除modelsim软件仿真电路以外,我又学会了QuartusII仿真软件的使用,觉得两个软件各自有各自的优点。并学会使用QuartusII进行对软件的综合并学会了后仿真。
源程序清单
设计程序:
module db2ram(wr_clk,wr_en,wr_addr,data_in,
rd_clk,rd_en,rd_addr,data_out );
input rd_clk,rd_en,wr_clk,wr_en;
input [7:0] data_in;
input [9:0] rd_addr,wr_addr;
output [7:0] data_out;
reg [7:0] data_out;
reg [7:0] mem [1023:0];
always @(posedge wr_clk)
if(wr_en)
mem[wr_addr] = data_in;
always @(posedge rd_clk)
if(rd_en)
data_out = mem[rd_addr];
endmodule
(2)激励如下:
`timescale 1 ns/1 ns
module stimulateram;
reg RD_CLK,RD_EN,WR_CLK,WR_EN;
reg [7:0] DATA_IN;
reg [9:0] RD_ADDR,WR_ADDR;
wire [7:0] DATA_OUT;
db2ram ram(WR_CLK,WR_EN,WR_ADDR,DATA_IN,
RD_CLK,RD_EN,RD_ADDR,DATA_OUT );
initial
WR_CLK=0;
always
#5 WR_CLK=~WR_CLK;
initial
RD_CLK=0;
always
#5 RD_CLK=~RD_CLK;
initial
begin
WR_EN = 0; RD_EN = 0; DATA_IN = 8d23; WR_ADDR = 10d0; RD_ADDR = 10d0;
#10 WR_EN = 1;
#10 RD_EN = 1;
#20 WR_EN = 0; RD_EN
文档评论(0)