• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

RAM控制器设计VHDL代码ISE仿真

09/06 11:20
643
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24092Q21502920.doc

共1个文件

名称:RAM控制器设计VHDL代码ISE仿真

软件:ISE

语言:VHDL

代码功能:

RAM控制器

1、使用状态机设计RAM控制器;

2、其中状态机编码分别使用二进制编码、独热码、格雷码

3、使用2种编码风格。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

State编码方式分别为:二进制编码、独热码、格雷码

2. 程序文件

状态机编码方式(下图为二进制编码)

3. 程序编译

资源占用

4. Testbench

5. 仿真图

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
ENTITY RAM_Controller_1 IS
   PORT (
      clock       : IN STD_LOGIC;
      cs          : IN STD_LOGIC;
      wr          : IN STD_LOGIC;
      rd          : IN STD_LOGIC;
      addrin      : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
      ready       : OUT STD_LOGIC;
      re          : OUT STD_LOGIC;
      addrout     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
      ras         : OUT STD_LOGIC;
      cas         : OUT STD_LOGIC
   );
END RAM_Controller_1;
ARCHITECTURE behave OF RAM_Controller_1 IS
   SIGNAL state : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000"; 
   constant  s_idle      :STD_LOGIC_VECTOR(2 DOWNTO 0) := "000";  
   constant  s_loadaddr  :STD_LOGIC_VECTOR(2 DOWNTO 0) := "001";  
   constant  s_wr        :STD_LOGIC_VECTOR(2 DOWNTO 0) := "010";  
   constant  s_rd        :STD_LOGIC_VECTOR(2 DOWNTO 0) := "011";  
   constant  s_ready     :STD_LOGIC_VECTOR(2 DOWNTO 0) := "100";  
   constant  s_ras_addr  :STD_LOGIC_VECTOR(2 DOWNTO 0) := "101";  
   constant  s_cas_addr  :STD_LOGIC_VECTOR(2 DOWNTO 0) := "110";  
   SIGNAL wr_r  : STD_LOGIC;
   SIGNAL rd_r  : STD_LOGIC;
BEGIN
--2段式状态机
   PROCESS (clock)
   BEGIN
      IF (clock'EVENT AND clock = '1') THEN
         CASE state IS
            WHEN s_idle =>
               IF (cs = '1') THEN
                  state <= s_loadaddr;
               ELSE
                  state <= s_idle;
               END IF;
            WHEN s_loadaddr =>
               IF (wr = '1') THEN
                  state <= s_wr;
               ELSIF (rd = '1') THEN
                  state <= s_rd;
               ELSE
                  state <= s_loadaddr;
               END IF;
            WHEN s_wr =>
               state <= s_ready;
            WHEN s_rd =>
               state <= s_ready;
            WHEN s_ready =>
               state <= s_ras_addr;
            WHEN s_ras_addr =>
               state <= s_cas_addr;
            WHEN s_cas_addr =>
               state <= s_idle;
            WHEN OTHERS =>
         END CASE;
      END IF;
   END PROCESS;
   
   PROCESS (clock)
   BEGIN
      IF (clock'EVENT AND clock = '1') THEN
         IF (state = s_ready) THEN
            ready <= '1';
         ELSE
            ready <= '0';
         END IF;
      END IF;
   END PROCESS;
   
   PROCESS (clock)
   BEGIN
      IF (clock'EVENT AND clock = '1') THEN
         IF (state = s_loadaddr) THEN
            wr_r <= wr;
         END IF;
      END IF;
   END PROCESS;
   
   
   PROCESS (clock)
   BEGIN
      IF (clock'EVENT AND clock = '1') THEN
         IF (state = s_loadaddr) THEN
            rd_r <= rd;
         END IF;
      END IF;
   END PROCESS;
   
   
   PROCESS (clock)
   BEGIN
      IF (clock'EVENT AND clock = '1') THEN
         IF (state = s_ras_addr) THEN
            addrout <= addrin(15 DOWNTO 8);
         ELSIF (state = s_cas_addr) THEN
            addrout <= addrin(7 DOWNTO 0);
         END IF;
      END IF;
   END PROCESS;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1152

  • 2-24092Q21502920.doc
    下载

相关推荐