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

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

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

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
    下载

相关推荐