aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/synth/mem01
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-02-20 07:41:18 +0100
committerTristan Gingold <tgingold@free.fr>2020-02-20 07:48:44 +0100
commitcf9d17b816445b414bf1855bff8bd070ea4da1b6 (patch)
treed475dad8e313ec9c075bf051b1325ce1d4de48e8 /testsuite/synth/mem01
parentedfe8e0915a640537617d0afb3876ce2603bda81 (diff)
downloadghdl-cf9d17b816445b414bf1855bff8bd070ea4da1b6.tar.gz
ghdl-cf9d17b816445b414bf1855bff8bd070ea4da1b6.tar.bz2
ghdl-cf9d17b816445b414bf1855bff8bd070ea4da1b6.zip
testsuite/synth: add a source for mem01
Diffstat (limited to 'testsuite/synth/mem01')
-rw-r--r--testsuite/synth/mem01/NOTES.txt2
-rw-r--r--testsuite/synth/mem01/sram02.vhdl29
2 files changed, 31 insertions, 0 deletions
diff --git a/testsuite/synth/mem01/NOTES.txt b/testsuite/synth/mem01/NOTES.txt
index 84edd5041..3c362c073 100644
--- a/testsuite/synth/mem01/NOTES.txt
+++ b/testsuite/synth/mem01/NOTES.txt
@@ -3,7 +3,9 @@ Tests for RAMs
rom1: asynchronous ROM
srom01: Read (initialized ROM).
+
sram01: Read+Write (at the same address).
+sram02: Write+Read (at the same address).
dpram1: Read+Write (using signals, without enables)
dpram2: Read+Write (using a variable, without enables)
dpram3: Read+Write (like dpram2 but downto)
diff --git a/testsuite/synth/mem01/sram02.vhdl b/testsuite/synth/mem01/sram02.vhdl
new file mode 100644
index 000000000..dc9be662f
--- /dev/null
+++ b/testsuite/synth/mem01/sram02.vhdl
@@ -0,0 +1,29 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity sram02 is
+ port (
+ clk_i : std_logic;
+ addr_i : std_logic_vector(3 downto 0);
+ data_i : std_logic_vector(7 downto 0);
+ data_o : out std_logic_vector(7 downto 0);
+ wen_i : std_logic);
+end sram02;
+
+architecture behav of sram02 is
+begin
+ process (clk_i, addr_i)
+ type mem_type is array (0 to 15) of std_logic_vector (7 downto 0);
+ variable mem : mem_type;
+ variable addr : natural range mem_type'range;
+ begin
+ if rising_edge(clk_i) then
+ addr := to_integer (unsigned (addr_i));
+ if wen_i = '1' then
+ mem (addr) := data_i;
+ end if;
+ data_o <= mem (addr);
+ end if;
+ end process;
+end behav;