集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: lcytms

FPGA初级课程第十六讲 ROM

[复制链接]
 楼主| lcytms 发表于 2016-11-18 17:32:17 | 显示全部楼层
这时检查工程导航一栏,发现Files一项中已经自动生成对应的IP核文件my_rom.qip。
打开下一级的my_rom.v,可以看到其封装代码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-18 17:33:17 | 显示全部楼层
打开已经生成的my_rom_inst.v文件。
my_rom        my_rom_inst (
        .address ( address_sig ),
        .clock ( clock_sig ),
        .q ( q_sig )
        );

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-18 17:35:07 | 显示全部楼层
本帖最后由 lcytms 于 2016-11-21 11:49 编辑

将my_rom_inst.v代码拷贝粘贴到rom.v模块中,修改实例化的信号名。
新建rom_controller模块,编写框架代码。
在rom.v模块中放入rom_controller模块,对其进行实例化操作。
编写rom.v模块如下。
module rom (clk, rst_n, q);

        input clk, rst_n;
       
        output [7:0] q;

        wire [7:0] addr;

        rom_controller rom_controller_inst (
                        .clk(clk),
                        .rst_n(rst_n),
                        .addr(addr)
                );
       
        my_rom        my_rom_inst (
                        .address ( addr ),
                        .clock ( clk ),
                        .q ( q )
                );

endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-18 17:36:53 | 显示全部楼层
继续完成rom_controller模块。
编写rom_controller模块代码如下。
module rom_controller (clk, rst_n, addr);

        input clk, rst_n;
       
        output reg [7:0] addr;

        always @ (posedge clk or negedge rst_n)
                begin
                        if (!rst_n)
                                addr <= 0;
                        else
                                if (addr < 255)
                                        addr <= addr + 8'd1;
                                else
                                        addr <= 0;
                end

endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-18 17:38:43 | 显示全部楼层
新建仿真模块Testbench。
新建rom_tb.v模块,编写代码如下。
`timescale 1ns/1ps

module rom_tb;

        reg clk, rst_n;
       
        wire [7:0] q;

        rom dut (.clk(clk), .rst_n(rst_n), .q(q));

        initial
                begin
                        clk = 1;
                        rst_n = 0;
                        #200.1
                        rst_n = 1;
                       
                        #10_000 $stop;
                end
               
        always #10 clk = ~clk;
       
endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-18 17:39:46 | 显示全部楼层
仿真运行结果

设置好仿真之后,可以看到仿真结果。
可以看到复位完成后,q依次输出0~255,依次循环。
仿真运行结果与设计要求一致。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-18 17:43:39 | 显示全部楼层
查看RTL视图——altsyncram

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-18 17:44:20 | 显示全部楼层
好了,今天的课程就讲到这里。
通过今天的课程,我们学习了ROM(只读存储器)的基本概念,然后实际演示了一下应用ROM的IP核来进行ROM逻辑电路的建模与仿真,并通过仿真查看效果。
希望大家掌握ROM的基本概念,并熟练运用Verilog语言调用对应的IP核编写相关逻辑。
更复杂的知识和技巧我们将逐步通过后面的课程展现给大家。

课程到此结束,谢谢大家的关注!
fpga_feixiang 发表于 2016-11-19 14:52:59 | 显示全部楼层
这个课程高大上
fpga_feixiang 发表于 2023-9-27 14:24:24 | 显示全部楼层
6                              
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-23 11:17 , Processed in 0.097884 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表