存储器模块的VHDL设计 典型的存储器模块有 寻址存储器: ROM RAN 顺序存储器: FIFO Stack(LIFO)
典型的存储器模块有: 寻址存储器:ROM RAM 顺序存储器:FIFO Stack (LIFO) 存储器模块的VHDL设计
寻址存储器的VHDL设计 RoM和RAM属于通用大规模器件,一般不 需要自行设计;但是在数字系统中,有时也需 要设计一些小型的存储器件,用于特定的用 途:例如临时存放数据,构成查表运算等。 些类器件的特点为地址与存储内容直接对应 设计时将输入地址作为给出输出内容的条件 采用条件赋值方式进行设计
ROM和RAM属于通用大规模器件,一般不 需要自行设计;但是在数字系统中,有时也需 要设计一些小型的存储器件,用于特定的用 途:l例如临时存放数据,构成查表运算等。 此类器件的特点为地址与存储内容直接对应, 设计时将输入地址作为给出输出内容的条件, 采用条件赋值方式进行设计。 寻址存储器的VHDL设计
寻址存储器设计:16X8位RAM 设计思想 将每个8位数组作为一个字(Word); 总共存储16个字; 将ram作为由16个字构成的数组,以地 址为下标; 通过读写控制模式实现对特定地址上字 的读出或写入
设计思想: 将每个8位数组作为一个字(word); 总共存储16个字; 将ram作为由16个字构成的数组,以地 址为下标; 通过读写控制模式实现对特定地址上字 的读出或写入; 寻址存储器设计: 16x8位RAM
寻址存储器设计:16X8位RAM library ieee use ieee std logic 1164. all use ieeestd logic unsigned. all entity kram is port (clk, wr, cs: in std logic d: inout std logic vector(7 downto 0) adr: in std logic vector (3 downto O) end kram:
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity kram is port ( clk,wr,cs: in std_logic; d: inout std_logic_vector(7 downto 0); adr: in std_logic_vector(3 downto 0)); end kram; 寻址存储器设计: 16x8位RAM
寻址存储器设计:16X8位RAM architecture beh of kram is subtype word is std logic vector (7 downto 0) type memory is array(0 to 15) of word; signal adr in: integer 0 to 15; SIgnal sram: memory begin adr in<=conv integer (adr); 将地址转换为数组下标 process(clk) begin
architecture beh of kram is subtype word is std_logic_vector(7 downto 0); type memory is array (0 to 15) of word; signal adr_in:integer range 0 to 15; signal sram:memory; begin adr_in<=conv_integer (adr); --将地址转换为数组下标 process(clk) begin 寻址存储器设计: 16x8位RAM
寻址存储器设计:16x8位RAM if(clk'event and clk=l)then if(cs= land wre="1)then-片选、写 sram(adr in)<=d; end if: f(cs=' 1and wr=0)then-片选、读 d<=sram(adr in); end if: end if: end process end beh
if(clk'event and clk='1') then if (cs='1'and wr='1') then --片选、写 sram (adr_in)<=d; end if; if (cs='1'and wr='0' ) then --片选、读 d<=sram (adr_in); end if; end if; end process; end beh; 寻址存储器设计: 16x8位RAM
寻址存储器设计:16X8位ROM RoM的内容是初始设计电路时就写入到內部 的,通常采用电路的固定结构来实现存储 RoM只需设置数据输出端口和地址输入端口; 设计思想:采用二进制译码器的设计方式, 将每个输入组态对应的输出与一组存储数据 对应起来;
ROM的内容是初始设计电路时就写入到内部 的,通常采用电路的固定结构来实现存储; ROM只需设置数据输出端口和地址输入端口; 设计思想:采用二进制译码器的设计方式, 将每个输入组态对应的输出与一组存储数据 对应起来; 寻址存储器设计: 16x8位ROM
寻址存储器设计:16X8位ROM library ieee use ieee std logic 1164.all entity rom is port(dataout: out std logic vector(7 downto 0); addr: in std logic vector 3 downto 0) ce: in std logic) end rom
library ieee; use ieee.std_logic_1164.all; entity rom is port(dataout: out std_logic_vector(7 downto 0); addr: in std_logic_vector(3 downto 0); ce: in std_logic); end rom; 寻址存储器设计: 16x8位ROM
寻址存储器设计:16X8位ROM architecture d of rom is signal id: std logic vector (4 downto 0) begin id < addr ce dataout <=000011ll when id =00000 else "11110000" when id="00010"else "11001100" when id="00100"else 00110011 when id=0o11o else 0101010" when id="01000else w01010101 when id=01o1o else i10011001 when id =01100 else
architecture d of rom is signal id: std_logic_vector(4 downto 0); begin id <= addr & ce; dataout <= "00001111" when id ="00000" else "11110000" when id ="00010" else "11001100" when id ="00100" else "00110011" when id ="00110" else "10101010" when id ="01000" else "01010101" when id ="01010" else "10011001" when id ="01100" else 寻址存储器设计: 16x8位ROM
寻址存储器设计:16X8位ROM 01100110 when id =011o else "o0000000" when id="10000"else w1111111l when id =10010 else "00010001" when id="10100else "10001000" when id="10110"else w10011001 when id =11000 else "01100110" when id="11010"else 10100110 when id =11100 else 01100111 when id=1l11o else WXXXXXXXX end d:
"01100110" when id ="01110" else "00000000" when id ="10000" else "11111111" when id ="10010" else "00010001" when id ="10100" else "10001000" when id ="10110" else "10011001" when id ="11000" else "01100110" when id ="11010" else "10100110" when id ="11100" else "01100111" when id ="11110" else "XXXXXXXX"; end d; 寻址存储器设计: 16x8位ROM