📄 rom_1024x8.vhd
字号:
-------------------------------------------------------------------------------
-- ROM inference using Synplify --
-- (BlockRAM ROM example) --
-------------------------------------------------------------------------------
--
-- GENERAL:
-- Synplify infers ROM when all assignment values are constants in a
-- "case" or "if...else" statement
--
-- Virtex-II ROM resources:
-- - Logic
-- - Distributed ROM (Primitives: ROM16X1, ROM32X1, ROM64X1, ROM128X1,
-- ROM256X1)
-- - BlockRAM (Primitives: RAMB16...)
-- Different ROMs:
-- - asynchronous (Mapped to: Logic or Distributed ROM)
-- - synchronous (Mapped to: Logic, Distribute ROM or BlockRAM)
-- - Clock enable
-- - Reset (output buffer)
-- - Dual port (BlockRAM only - instanciation only)
--
-- NOTES:
-- - Mapping ROM into Distributed ROM (Synplify default)
-- - At least half the available addresses must be assigned a value
-- - Mapping ROM to BlockRAM will be available in Synplify 7.1
-- - either addresses or outputs of the ROM should be registered
-- - memory block should be more than 256 different addresses
-- Log file message:
-- - Synplicity Xilinx Technology Mapper section
-- @N|Packed ROM romsig[7:0] (10 input, 8 output) to Block SelectRAM
-- Resource Usage Report section (RAM/ROM usage summary)
-- RAMB16_S18 1 use
-------------------------------------------------------------------------------
-- Example: Synchronous 1024X8 ROM mapped to BlockRAM
-------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
entity romtest is port (
clk : in std_logic;
input : in std_logic_vector(9 downto 0);
output : out std_logic_vector(7 downto 0));
end romtest;
architecture beh of romtest is
signal registers : std_logic_vector(7 downto 0);
signal romsig : std_logic_vector(7 downto 0);
-- attribute syn_romstyle : string;
-- attribute syn_romstyle of romsig : signal is "block_ram";
-- value: "select_rom" forces Distributed ROM implementation (default)
-- value: "logic" forces Logic ROM implementation
-- value: "block_ram" forces BlockRAM ROM implementation (available in 7.1)
begin
process (input)
begin
case ( input ) is
when B"00" & X"00" => romsig <= X"00";
when B"00" & X"01" => romsig <= X"01";
when B"00" & X"02" => romsig <= X"05";
when B"00" & X"03" => romsig <= X"0d";
when B"00" & X"04" => romsig <= X"1b";
when B"00" & X"05" => romsig <= X"32";
when B"00" & X"06" => romsig <= X"4f";
when B"00" & X"07" => romsig <= X"6f";
when B"00" & X"08" => romsig <= X"8f";
when B"00" & X"09" => romsig <= X"af";
when B"00" & X"0a" => romsig <= X"cf";
when B"00" & X"0b" => romsig <= X"ee";
when B"00" & X"0c" => romsig <= X"e5";
when B"00" & X"0d" => romsig <= X"e5";
when B"00" & X"0e" => romsig <= X"e5";
when B"00" & X"0f" => romsig <= X"01";
when B"00" & X"10" => romsig <= X"02";
when B"00" & X"11" => romsig <= X"00";
when B"00" & X"12" => romsig <= X"06";
when B"00" & X"13" => romsig <= X"0e";
when B"00" & X"14" => romsig <= X"1c";
when B"00" & X"15" => romsig <= X"33";
when B"00" & X"16" => romsig <= X"50";
when B"00" & X"17" => romsig <= X"70";
when B"00" & X"18" => romsig <= X"90";
when B"00" & X"19" => romsig <= X"b0";
when B"00" & X"1a" => romsig <= X"d0";
when B"00" & X"1b" => romsig <= X"ee";
when B"00" & X"1c" => romsig <= X"e6";
when B"00" & X"1d" => romsig <= X"e6";
when B"00" & X"1e" => romsig <= X"02";
when B"00" & X"1f" => romsig <= X"03";
when B"00" & X"20" => romsig <= X"01";
when B"00" & X"21" => romsig <= X"07";
when B"00" & X"22" => romsig <= X"0f";
when B"00" & X"23" => romsig <= X"1d";
when B"00" & X"24" => romsig <= X"34";
when B"00" & X"25" => romsig <= X"51";
when B"00" & X"26" => romsig <= X"71";
when B"00" & X"27" => romsig <= X"91";
when B"00" & X"28" => romsig <= X"b1";
when B"00" & X"29" => romsig <= X"d1";
when B"00" & X"2a" => romsig <= X"ef";
when B"00" & X"2b" => romsig <= X"e7";
when B"00" & X"2c" => romsig <= X"e7";
when B"00" & X"2d" => romsig <= X"03";
when B"00" & X"2e" => romsig <= X"04";
when B"00" & X"2f" => romsig <= X"02";
when B"00" & X"30" => romsig <= X"08";
when B"00" & X"31" => romsig <= X"10";
when B"00" & X"32" => romsig <= X"1e";
when B"00" & X"33" => romsig <= X"35";
when B"00" & X"34" => romsig <= X"52";
when B"00" & X"35" => romsig <= X"72";
when B"00" & X"36" => romsig <= X"92";
when B"00" & X"37" => romsig <= X"b2";
when B"00" & X"38" => romsig <= X"d2";
when B"00" & X"39" => romsig <= X"f0";
when B"00" & X"3a" => romsig <= X"e8";
when B"00" & X"3b" => romsig <= X"e8";
when B"00" & X"3c" => romsig <= X"04";
when B"00" & X"3d" => romsig <= X"05";
when B"00" & X"3e" => romsig <= X"03";
when B"00" & X"3f" => romsig <= X"09";
when B"00" & X"40" => romsig <= X"01";
when B"00" & X"41" => romsig <= X"11";
when B"00" & X"42" => romsig <= X"1f";
when B"00" & X"43" => romsig <= X"36";
when B"00" & X"44" => romsig <= X"53";
when B"00" & X"45" => romsig <= X"73";
when B"00" & X"46" => romsig <= X"93";
when B"00" & X"47" => romsig <= X"b3";
when B"00" & X"48" => romsig <= X"d3";
when B"00" & X"49" => romsig <= X"f0";
when B"00" & X"4a" => romsig <= X"e9";
when B"00" & X"4b" => romsig <= X"05";
when B"00" & X"4c" => romsig <= X"06";
when B"00" & X"4d" => romsig <= X"04";
when B"00" & X"4e" => romsig <= X"0a";
when B"00" & X"4f" => romsig <= X"01";
when B"00" & X"50" => romsig <= X"12";
when B"00" & X"51" => romsig <= X"20";
when B"00" & X"52" => romsig <= X"37";
when B"00" & X"53" => romsig <= X"54";
when B"00" & X"54" => romsig <= X"74";
when B"00" & X"55" => romsig <= X"94";
when B"00" & X"56" => romsig <= X"b4";
when B"00" & X"57" => romsig <= X"d4";
when B"00" & X"58" => romsig <= X"f1";
when B"00" & X"59" => romsig <= X"ea";
when B"00" & X"5a" => romsig <= X"06";
when B"00" & X"5b" => romsig <= X"07";
when B"00" & X"5c" => romsig <= X"05";
when B"00" & X"5d" => romsig <= X"0b";
when B"00" & X"5e" => romsig <= X"02";
when B"00" & X"5f" => romsig <= X"13";
when B"00" & X"60" => romsig <= X"21";
when B"00" & X"61" => romsig <= X"38";
when B"00" & X"62" => romsig <= X"55";
when B"00" & X"63" => romsig <= X"75";
when B"00" & X"64" => romsig <= X"95";
when B"00" & X"65" => romsig <= X"b5";
when B"00" & X"66" => romsig <= X"d5";
when B"00" & X"67" => romsig <= X"f2";
when B"00" & X"68" => romsig <= X"eb";
when B"00" & X"69" => romsig <= X"07";
when B"00" & X"6a" => romsig <= X"08";
when B"00" & X"6b" => romsig <= X"06";
when B"00" & X"6c" => romsig <= X"0c";
when B"00" & X"6d" => romsig <= X"03";
when B"00" & X"6e" => romsig <= X"14";
when B"00" & X"6f" => romsig <= X"22";
when B"00" & X"70" => romsig <= X"39";
when B"00" & X"71" => romsig <= X"56";
when B"00" & X"72" => romsig <= X"76";
when B"00" & X"73" => romsig <= X"96";
when B"00" & X"74" => romsig <= X"b6";
when B"00" & X"75" => romsig <= X"d6";
when B"00" & X"76" => romsig <= X"f2";
when B"00" & X"77" => romsig <= X"ec";
when B"00" & X"78" => romsig <= X"08";
when B"00" & X"79" => romsig <= X"09";
when B"00" & X"7a" => romsig <= X"07";
when B"00" & X"7b" => romsig <= X"0d";
when B"00" & X"7c" => romsig <= X"03";
when B"00" & X"7d" => romsig <= X"15";
when B"00" & X"7e" => romsig <= X"23";
when B"00" & X"7f" => romsig <= X"3a";
when B"00" & X"80" => romsig <= X"57";
when B"00" & X"81" => romsig <= X"77";
when B"00" & X"82" => romsig <= X"97";
when B"00" & X"83" => romsig <= X"b7";
when B"00" & X"84" => romsig <= X"d7";
when B"00" & X"85" => romsig <= X"f3";
when B"00" & X"86" => romsig <= X"ed";
when B"00" & X"87" => romsig <= X"09";
when B"00" & X"88" => romsig <= X"0a";
when B"00" & X"89" => romsig <= X"08";
when B"00" & X"8a" => romsig <= X"0e";
when B"00" & X"8b" => romsig <= X"04";
when B"00" & X"8c" => romsig <= X"16";
when B"00" & X"8d" => romsig <= X"24";
when B"00" & X"8e" => romsig <= X"3b";
when B"00" & X"8f" => romsig <= X"58";
when B"00" & X"90" => romsig <= X"78";
when B"00" & X"91" => romsig <= X"98";
when B"00" & X"92" => romsig <= X"b8";
when B"00" & X"93" => romsig <= X"d8";
when B"00" & X"94" => romsig <= X"f4";
when B"00" & X"95" => romsig <= X"ee";
when B"00" & X"96" => romsig <= X"0a";
when B"00" & X"97" => romsig <= X"0b";
when B"00" & X"98" => romsig <= X"09";
when B"00" & X"99" => romsig <= X"0f";
when B"00" & X"9a" => romsig <= X"05";
when B"00" & X"9b" => romsig <= X"17";
when B"00" & X"9c" => romsig <= X"25";
when B"00" & X"9d" => romsig <= X"3c";
when B"00" & X"9e" => romsig <= X"59";
when B"00" & X"9f" => romsig <= X"79";
when B"00" & X"a0" => romsig <= X"99";
when B"00" & X"a1" => romsig <= X"b9";
when B"00" & X"a2" => romsig <= X"d9";
when B"00" & X"a3" => romsig <= X"f4";
when B"00" & X"a4" => romsig <= X"ef";
when B"00" & X"a5" => romsig <= X"0b";
when B"00" & X"a6" => romsig <= X"0c";
when B"00" & X"a7" => romsig <= X"0a";
when B"00" & X"a8" => romsig <= X"10";
when B"00" & X"a9" => romsig <= X"05";
when B"00" & X"aa" => romsig <= X"18";
when B"00" & X"ab" => romsig <= X"26";
when B"00" & X"ac" => romsig <= X"3d";
when B"00" & X"ad" => romsig <= X"5a";
when B"00" & X"ae" => romsig <= X"7a";
when B"00" & X"af" => romsig <= X"9a";
when B"00" & X"b0" => romsig <= X"ba";
when B"00" & X"b1" => romsig <= X"da";
when B"00" & X"b2" => romsig <= X"f5";
when B"00" & X"b3" => romsig <= X"f0";
when B"00" & X"b4" => romsig <= X"0c";
when B"00" & X"b5" => romsig <= X"0d";
when B"00" & X"b6" => romsig <= X"0b";
when B"00" & X"b7" => romsig <= X"11";
when B"00" & X"b8" => romsig <= X"07";
when B"00" & X"b9" => romsig <= X"19";
when B"00" & X"ba" => romsig <= X"02";
when B"00" & X"bb" => romsig <= X"27";
when B"00" & X"bc" => romsig <= X"3e";
when B"00" & X"bd" => romsig <= X"5b";
when B"00" & X"be" => romsig <= X"7b";
when B"00" & X"bf" => romsig <= X"9b";
when B"00" & X"c0" => romsig <= X"bb";
when B"00" & X"c1" => romsig <= X"e0";
when B"00" & X"c2" => romsig <= X"d1";
when B"00" & X"c3" => romsig <= X"0d";
when B"00" & X"c4" => romsig <= X"0e";
when B"00" & X"c5" => romsig <= X"0c";
when B"00" & X"c6" => romsig <= X"12";
when B"00" & X"c7" => romsig <= X"08";
when B"00" & X"c8" => romsig <= X"1a";
when B"00" & X"c9" => romsig <= X"03";
when B"00" & X"ca" => romsig <= X"28";
when B"00" & X"cb" => romsig <= X"3f";
when B"00" & X"cc" => romsig <= X"5c";
when B"00" & X"cd" => romsig <= X"7c";
when B"00" & X"ce" => romsig <= X"9c";
when B"00" & X"cf" => romsig <= X"bc";
when B"00" & X"d0" => romsig <= X"e1";
when B"00" & X"d1" => romsig <= X"d2";
when B"00" & X"d2" => romsig <= X"0e";
when B"00" & X"d3" => romsig <= X"0f";
when B"00" & X"d4" => romsig <= X"0d";
when B"00" & X"d5" => romsig <= X"13";
when B"00" & X"d6" => romsig <= X"09";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -