名称: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
阅读全文
503