xilinx FPGA ROM IP核的使用(VHDL&ISE)

这篇具有很好参考价值的文章主要介绍了xilinx FPGA ROM IP核的使用(VHDL&ISE)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.新建工程之后 建一个ip核文件:

2.编写顶层文件或者激励文件:(一定一定点击下面这个例化模板 去对ip核进行例化)

3.查看rtl图:

  4编写测试文件:

5.仿真图:

工程下载链接:https://download.csdn.net/download/qq_43811597/86488775


1.新建工程之后 建一个ip核文件:

xilinx FPGA ROM IP核的使用(VHDL&ISE)

 xilinx FPGA ROM IP核的使用(VHDL&ISE)

 xilinx FPGA ROM IP核的使用(VHDL&ISE)

 根据所存数据的最大值来设置数据位宽(但位宽不知道需不需要换算,还是说将最大的那个数设为位宽)

根据所存数据个数来设置数据深度(他这里的深度好像不用根据个数去换算,直接就是深度=数据个数)

我本来以为我存700个数据 那么深度就是10,结果一直报错 不能生成ip核

xilinx FPGA ROM IP核的使用(VHDL&ISE)

就是这个加载coe这块会变红,还有就是一直报错:the memory initialization vector can contain between 1 to write depth A number of entires. 

one or more of the parameters are invalid. please correct and try again.

xilinx FPGA ROM IP核的使用(VHDL&ISE)

然后我看到深度那个范围很大,就把深度直接改成数据个数了,没有错误出现,但是宽度需不需要改 暂时不确定

xilinx FPGA ROM IP核的使用(VHDL&ISE)

 在这里是将matlab产生的数据导入到rom当中(放coe文件的路径不能有中文,并且xilinx系列的rom放coe文件,altera系列放mif文件),可以点击show看是否coe文件有效

xilinx FPGA ROM IP核的使用(VHDL&ISE)

 matlab生成数据步骤链接:http://t.csdn.cn/OvDPP

2.编写顶层文件或者激励文件:(一定一定点击下面这个例化模板 去对ip核进行例化)

xilinx FPGA ROM IP核的使用(VHDL&ISE)

 在ram.vho  点开是一个.vho的文件,里面就有你建的ip核的元件声明和例化(ip核的名字跟顶层文件或者其他的测试或者其他模块名字不要重!!!我找了一周的错) 

xilinx FPGA ROM IP核的使用(VHDL&ISE)

这里可以先建立一个top文件,对rom进行例化,以及地址数据的产生

xilinx FPGA ROM IP核的使用(VHDL&ISE)

顶层代码如下:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;


entity top is
PORT (
    clk : IN STD_LOGIC;
    rst_n : IN STD_LOGIC;
    dout : OUT STD_LOGIC_VECTOR(10 DOWNTO 0)
  );
end top;

architecture Behavioral of top is

COMPONENT rom
  PORT (
    clka : IN STD_LOGIC;
    addra : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
    douta : OUT STD_LOGIC_VECTOR(10 DOWNTO 0)
  );
END COMPONENT;

signal addr :  STD_LOGIC_VECTOR(9 DOWNTO 0):= (others => '0');

begin

u0 : rom
  PORT MAP (
    clka => clk,
    addra => addr,
    douta => dout
  );
  
process(clk)
begin
    if (rst_n = '1') then
        addr <= (others => '0');
    elsif (rising_edge(clk)) then
        if  addr = "1010111100" then
            addr <= (others => '0');
        else
            addr <= addr + '1';
        end if;
    end if;
end process;
end Behavioral;

3.查看rtl图:

xilinx FPGA ROM IP核的使用(VHDL&ISE)

  4编写测试文件:

xilinx FPGA ROM IP核的使用(VHDL&ISE)

 tb文件如下:


LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
 

 
ENTITY top_tb IS
END top_tb;
 
ARCHITECTURE behavior OF top_tb IS 
 
    -- Component Declaration for the Unit Under Test (UUT)
 
    COMPONENT top
    PORT(
         clk : IN  std_logic;
         rst_n : IN STD_LOGIC;
         dout : OUT  std_logic_vector(10 downto 0)
        );
    END COMPONENT;
    

   --Inputs
   signal clk : std_logic := '0';
signal rst_n : std_logic := '1';
 	--Outputs
   signal dout : std_logic_vector(10 downto 0);

   -- Clock period definitions
   constant clk_period : time := 10 ns;
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
   uut: top PORT MAP (
          clk => clk,
          rst_n => rst_n,
          dout => dout
        );

   -- Clock process definitions
   clk_process :process
   begin
		clk <= '0';
		wait for clk_period/2;
		clk <= '1';
		wait for clk_period/2;
   end process;
 

   -- Stimulus process
   stim_proc: process
   begin		
      -- hold reset state for 100 ns.
      
      rst_n <= '0';

      wait for clk_period*10;

      -- insert stimulus here 

      wait;
   end process;

END;

5.仿真图:

可以看到最开始的数据和吻合的(注意生成地址数据时,要符合时钟)

xilinx FPGA ROM IP核的使用(VHDL&ISE)

 xilinx FPGA ROM IP核的使用(VHDL&ISE)

 可以看出最后的数据也是吻合的

xilinx FPGA ROM IP核的使用(VHDL&ISE)

 xilinx FPGA ROM IP核的使用(VHDL&ISE)

 

注:另外我们也可以不建立top文件,直接建立tb文件,在tb文件中产生时钟和地址数据即可:

xilinx FPGA ROM IP核的使用(VHDL&ISE)文章来源地址https://www.toymoban.com/news/detail-478685.html


LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
 

 
ENTITY rom_tb IS
END rom_tb;
 
ARCHITECTURE behavior OF rom_tb IS 
 
    -- Component Declaration for the Unit Under Test (UUT)
 
    COMPONENT rom
    PORT(
         clka : IN  std_logic;
         addra : IN  std_logic_vector(9 downto 0);
         douta : OUT  std_logic_vector(10 downto 0)
        );
    END COMPONENT;
    

   --Inputs
   signal clka : std_logic := '0';
   signal addra : std_logic_vector(9 downto 0) := (others => '0');

 	--Outputs
   signal douta : std_logic_vector(10 downto 0);

   -- Clock period definitions
   constant clka_period : time := 10 ns;
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
   uut: rom PORT MAP (
          clka => clka,
          addra => addra,
          douta => douta
        );

   -- Clock process definitions
   clka_process :process
   begin
		clka <= '0';
		wait for clka_period/2;
		clka <= '1';
		wait for clka_period/2;
   end process;
 

   -- Stimulus process
   stim_proc: process
   begin		
      -- hold reset state for 100 ns.
      
      addra <= (others => '0');
      
      if  addra = "1010111100" then
        addra <= (others => '0');
     else
        addra <= addra + '1';
      end if;
      wait for 100 ns;	

      wait for clka_period*10;

      -- insert stimulus here 

      wait;
   end process;

END;

工程下载链接:https://download.csdn.net/download/qq_43811597/86488775

到了这里,关于xilinx FPGA ROM IP核的使用(VHDL&ISE)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

    最近在做sobel、canny边缘检测需要使用shift_ram做3*3卷积模板,在这一块纠结过一阵子,最后还是想写篇博客沉淀一下。这篇博客就举例记录一下: mif文件输入shift_ram ip核,生成2条tap查看输出效果   新建mif文件,保持默认的256字数和8位字长   可以使用mif生成软件,也可以按

    2024年02月03日
    浏览(50)
  • XILINX关于Adder/Subtracter加法器减法器 IP核的使用与仿真

    平台:vivado21018.3,modelsim 10.6c 芯片:xc7k325tffg900-2 (active) Adder/Subtracter IP可提供LUT和单个DSP48 slice加法/减法实现方案。Adder/Subtracter 模块可实现加法器 (A+B)、减法器 (A–B),以及可通过签名或未签名数据运行的动态可配置加法器/减法器。该功能能够以单个DSP48 slice方式实现,也

    2024年02月15日
    浏览(46)
  • Xilinx FPGA——ISE的UCF时序约束

            时序约束是我们对FPGA设计的要求和期望,例如,我们希望FPGA设计可以工作在多快的时钟频率下等等。         设计是要求 系统中的每一个时钟都进行时序约束 。         TNM是最基本的分组约束语法,其语法定义如下:          {NET|INST|PIN} \\\"net_or_pin_or_i

    2024年02月04日
    浏览(45)
  • FPGA学习笔记(五):DDS IP核的使用

     1. 打开VIVADO,点击IP Catalog    2.搜索DDS,选择DDS Compiler    3. 配置参数 (1) 设置主频频率 50MHz   (2) 选择sine,并且勾选Has Phase Out(相位输出)    (3) 勾选Output TREDAY  (4) 输入频率    (5) 同上述步骤,再加一个DDS IP核 4. 测试文件   5. 结果展示        

    2024年02月11日
    浏览(57)
  • FPGA学习笔记(二):clk IP核的使用

     1.打开VIVADO,点击IP Catalog   2. 搜索clk,选择Clocking Wizard   3. 配置参数 (1) 选择MMCM      (2) 设置主频50Mhz  (3) 设置输出的4个clk的参数,分别是50M,25M,100M,100M反相。Phase表示相位,0表示同相,180表示反相。      (3) 其他参数  4. 测试文件 其中clk_wiz的例化可参考模板。点击

    2024年02月12日
    浏览(50)
  • FPGA学习笔记(六): FIR IP核的使用

    1. 打开VIVADO,点击IP Catalog   2.搜索DDS,选择DDS Compiler,按照上节配置频率为3MHz和4MHz的DDS IP核。    这里注意不勾选Has Phase Out 这里注意不勾选Output TREADY     输出频率为3MHz 按照上述步骤,配置4MHz的DDS,同样不勾选Has Phase Out以及不勾选Output TREADY。 3. 点击IP Catalog,搜索mu

    2024年02月03日
    浏览(45)
  • FPGA原理与结构——时钟IP核的使用与测试

    系列文章目录:FPGA原理与结构(0)——目录与传送门         本文介绍xilinx的时钟IP核 Clocking Wizard v6.0的具体使用与测试过程,在学习一个IP核的使用之前,首先需要对于IP核的具体参数和原理有一个基本的了解,具体可以参考: FPGA原理与结构——时钟IP核原理学习 https:/

    2024年02月09日
    浏览(37)
  • FPGA原理与结构(16)——时钟IP核的使用与测试

    系列文章目录:FPGA原理与结构(0)——目录与传送门         本文介绍xilinx的时钟IP核 Clocking Wizard v6.0的具体使用与测试过程,在学习一个IP核的使用之前,首先需要对于IP核的具体参数和原理有一个基本的了解,具体可以参考: FPGA原理与结构——时钟IP核原理学习 https:/

    2024年02月08日
    浏览(40)
  • FPGA原理与结构——RAM IP核的使用与测试

    系列文章目录:FPGA原理与结构(0)——目录与传送门 目录 一、前言 二、RAM IP核定制 1、RAM IP核 step1 打开vivado工程,点击左侧栏中的IP Catalog step2 在搜索栏搜索RAM,找到Block Memory Generator IP核: 2、IP核定制 step3 Baisc界面定制 step4 端口定制 step5 Other Options step6 Summary 3、IP核例化

    2024年02月11日
    浏览(40)
  • FPGA原理与结构——ROM IP的使用与测试

    系列文章目录:FPGA原理与结构(0)——目录与传送门         本文介绍 Block Memory Generator v8.4 IP核 实现ROM,在学习一个IP核的使用之前,首先需要对于IP核的具体参数和原理有一个基本的了解,具体可以参考: FPGA原理与结构——块RAM(Block RAM,BRAM) https://blog.csdn.net/appl

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包