mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-16 16:34:47 -04:00
added vhdl template for new BlockRam, see #232
This commit is contained in:
parent
0e001268ac
commit
c0b139741e
49
src/main/resources/vhdl2/DIG_BlockRAMDualPortMasked.tem
Normal file
49
src/main/resources/vhdl2/DIG_BlockRAMDualPortMasked.tem
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
LIBRARY ieee;
|
||||||
|
USE ieee.std_logic_1164.all;
|
||||||
|
USE ieee.numeric_std.all;
|
||||||
|
<?
|
||||||
|
|
||||||
|
entityName := "BlockRam_D"+elem.Bits+"A"+elem.AddrBits;
|
||||||
|
maskBits := elem.Bits / 8;
|
||||||
|
|
||||||
|
?>
|
||||||
|
entity <?=entityName?> is
|
||||||
|
port (
|
||||||
|
D: out std_logic_vector (<?=elem.Bits-1?> downto 0);
|
||||||
|
A: in std_logic_vector (<?=elem.AddrBits-1?> downto 0);
|
||||||
|
Din: in std_logic_vector (<?=elem.Bits-1?> downto 0);
|
||||||
|
str: in <?
|
||||||
|
if (maskBits=1) {
|
||||||
|
print("std_logic;");
|
||||||
|
} else {
|
||||||
|
print("std_logic_vector ("+(maskBits-1)+" downto 0);");
|
||||||
|
} ?>
|
||||||
|
C: in std_logic );
|
||||||
|
end <?=entityName?>;
|
||||||
|
|
||||||
|
architecture Behavioral of <?=entityName?> is
|
||||||
|
type memoryType is array(0 to <?=(1<<elem.AddrBits)-1?>) of std_logic_vector(<?=elem.Bits-1?> downto 0);
|
||||||
|
signal memory : memoryType;
|
||||||
|
signal rData : std_logic_vector (<?=elem.Bits-1?> downto 0) := (others => '0');
|
||||||
|
begin
|
||||||
|
process ( C )
|
||||||
|
begin
|
||||||
|
if rising_edge(C) then
|
||||||
|
rData <= memory(to_integer(unsigned(A)));
|
||||||
|
<? if (maskBits=1) { ?>
|
||||||
|
if str='1' then
|
||||||
|
memory(to_integer(unsigned(A))) <= Din;
|
||||||
|
end if;
|
||||||
|
<? } else {
|
||||||
|
for (i:=0;i<maskBits;i++) {
|
||||||
|
?>
|
||||||
|
if str(<?=i?>)='1' then
|
||||||
|
memory(to_integer(unsigned(A)))(<?=i*8+7?> downto <?=i*8?>) <= Din(<?=i*8+7?> downto <?=i*8?>);
|
||||||
|
end if;
|
||||||
|
<?
|
||||||
|
}
|
||||||
|
} ?>
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
D <= rData;
|
||||||
|
end Behavioral;
|
@ -47,7 +47,7 @@ public class VHDLSimulatorTest extends TestCase {
|
|||||||
File examples = new File(Resources.getRoot(), "/dig/test/vhdl");
|
File examples = new File(Resources.getRoot(), "/dig/test/vhdl");
|
||||||
try {
|
try {
|
||||||
int tested = new FileScanner(this::checkVHDLExport).noOutput().scan(examples);
|
int tested = new FileScanner(this::checkVHDLExport).noOutput().scan(examples);
|
||||||
assertEquals(33, tested);
|
assertEquals(36, tested);
|
||||||
assertEquals(tested+2, testBenches);
|
assertEquals(tested+2, testBenches);
|
||||||
} catch (FileScanner.SkipAllException e) {
|
} catch (FileScanner.SkipAllException e) {
|
||||||
// if ghdl is not installed its also ok
|
// if ghdl is not installed its also ok
|
||||||
|
@ -78,6 +78,7 @@
|
|||||||
<dataString>C A Din mask D
|
<dataString>C A Din mask D
|
||||||
|
|
||||||
# no write at all, mask is zero
|
# no write at all, mask is zero
|
||||||
|
C 0 0 0b1111 x
|
||||||
C 0 0xffffffff 0b0000 x
|
C 0 0xffffffff 0b0000 x
|
||||||
C 0 0 0b0000 0
|
C 0 0 0b0000 0
|
||||||
|
|
||||||
@ -97,6 +98,7 @@ C 0 0 0b0000 0xffffffff
|
|||||||
|
|
||||||
# write 16 bit words
|
# write 16 bit words
|
||||||
|
|
||||||
|
C 1 0 0b1111 x
|
||||||
C 1 0xffff 0b0011 x
|
C 1 0xffff 0b0011 x
|
||||||
C 1 0 0b0000 0xffff
|
C 1 0 0b0000 0xffff
|
||||||
|
|
||||||
@ -108,6 +110,7 @@ C 1 0 0b0000 0xffaaaaff
|
|||||||
|
|
||||||
# write 32 bit words
|
# write 32 bit words
|
||||||
|
|
||||||
|
C 2 0 0b1111 x
|
||||||
C 2 0xffffffff 0b1111 x
|
C 2 0xffffffff 0b1111 x
|
||||||
C 2 0 0b0000 0xffffffff
|
C 2 0 0b0000 0xffffffff
|
||||||
|
|
@ -78,6 +78,7 @@
|
|||||||
<dataString>C A Din mask D
|
<dataString>C A Din mask D
|
||||||
|
|
||||||
# no write at all, mask is zero
|
# no write at all, mask is zero
|
||||||
|
C 0 0 0b11111111 x
|
||||||
C 0 0xffffffffffffffff 0b00000000 x
|
C 0 0xffffffffffffffff 0b00000000 x
|
||||||
C 0 0 0b00000000 0
|
C 0 0 0b00000000 0
|
||||||
|
|
||||||
@ -109,6 +110,8 @@ C 0 0 0b00000000 0xffffffffffffffff
|
|||||||
|
|
||||||
# write 32 bit words
|
# write 32 bit words
|
||||||
|
|
||||||
|
C 1 0 0b11111111 x
|
||||||
|
|
||||||
C 1 0xffffffff 0b00001111 x
|
C 1 0xffffffff 0b00001111 x
|
||||||
C 1 0 0b00000000 0xffffffff
|
C 1 0 0b00000000 0xffffffff
|
||||||
|
|
@ -74,6 +74,7 @@
|
|||||||
<dataString>C A Din mask D
|
<dataString>C A Din mask D
|
||||||
|
|
||||||
# no write at all, mask is zero
|
# no write at all, mask is zero
|
||||||
|
C 0 0 1 x
|
||||||
C 0 0xff 0 x
|
C 0 0xff 0 x
|
||||||
C 0 0 0 0
|
C 0 0 0 0
|
||||||
|
|
||||||
@ -82,6 +83,7 @@ C 0 0 0 0
|
|||||||
C 0 0xff 1 x
|
C 0 0xff 1 x
|
||||||
C 1 0xf0 1 x
|
C 1 0xf0 1 x
|
||||||
|
|
||||||
|
C 2 0 1 x
|
||||||
C 2 0 0 0
|
C 2 0 0 0
|
||||||
0 0 0 0 0
|
0 0 0 0 0
|
||||||
0 1 0 0 0
|
0 1 0 0 0
|
Loading…
x
Reference in New Issue
Block a user