Stefan Schuermans commited on 2012-02-12 17:47:50
Showing 11 changed files, with 272 additions and 123 deletions.
| ... | ... |
@@ -1,5 +1,6 @@ |
| 1 | 1 |
SRCS=cyc_cnt.c lcd.c leds.c main.c |
| 2 | 2 |
|
| 3 |
+PERL=perl |
|
| 3 | 4 |
CC=mipsel-elf-gcc |
| 4 | 5 |
LD=mipsel-elf-ld |
| 5 | 6 |
OBJCOPY=mipsel-elf-objcopy |
| ... | ... |
@@ -11,8 +12,10 @@ DEPS=$(addsuffix .d,$(BASES)) |
| 11 | 12 |
OBJS=$(addsuffix .o,$(BASES)) |
| 12 | 13 |
|
| 13 | 14 |
.PHONY: all clean |
| 15 |
+.SUFFIXES: |
|
| 16 |
+.SECONDARY: |
|
| 14 | 17 |
|
| 15 |
-all: rom.vhd |
|
| 18 |
+all: rom.vhd ram.0.vhd ram.1.vhd ram.2.vhd ram.3.vhd |
|
| 16 | 19 |
|
| 17 | 20 |
ifneq ($(MAKECMDGOALS),clean) |
| 18 | 21 |
include deps |
| ... | ... |
@@ -36,17 +39,18 @@ fw.o: $(OBJS) |
| 36 | 39 |
fw: lnk.cmd boot.o fw.o |
| 37 | 40 |
$(LD) $(LFLAGS) -T lnk.cmd -o $@ boot.o fw.o |
| 38 | 41 |
|
| 39 |
-fw.bin: fw |
|
| 40 |
- $(OBJCOPY) -j .text -O binary $< $@ |
|
| 42 |
+%.bin: fw |
|
| 43 |
+ $(OBJCOPY) -j .$(basename $@) -O binary $< $@ |
|
| 41 | 44 |
|
| 42 |
-rom.vhd: rom.head.vhd rom.tail.vhd fw.bin |
|
| 43 |
- cat rom.head.vhd >$@ |
|
| 44 |
- hexdump -e '1/4 "%08X\n"' -v fw.bin | \ |
|
| 45 |
- sed 's/^/=> X"/;s/$$/",/' | \ |
|
| 46 |
- nl -p -v 0 | \ |
|
| 47 |
- sed 's/^/ /' >>$@ |
|
| 48 |
- cat rom.tail.vhd >>$@ |
|
| 45 |
+rom.vhd: rom.pl rom.bin |
|
| 46 |
+ $(PERL) rom.pl rom.bin >$@ |
|
| 47 |
+ |
|
| 48 |
+ram.%.vhd: ram.pl ram.bin |
|
| 49 |
+ $(PERL) ram.pl ram.bin $(patsubst ram.%.vhd,%,$@) >$@ |
|
| 49 | 50 |
|
| 50 | 51 |
clean: |
| 51 |
- rm -f $(OBJS) boot.o fw.o fw fw.bin rom.vhd |
|
| 52 |
+ rm -f $(DEPS) $(OBJS) |
|
| 53 |
+ rm -f boot.o fw.o fw |
|
| 54 |
+ rm -f rom.bin rom.vhd |
|
| 55 |
+ rm -f ram.bin ram.[0-3].vhd |
|
| 52 | 56 |
|
| ... | ... |
@@ -0,0 +1,70 @@ |
| 1 |
+#! /usr/bin/perl |
|
| 2 |
+ |
|
| 3 |
+use strict; |
|
| 4 |
+use warnings; |
|
| 5 |
+ |
|
| 6 |
+if (@ARGV < 2) {
|
|
| 7 |
+ die "usage: $0 <binary file> <ram number>\n"; |
|
| 8 |
+} |
|
| 9 |
+my $binfile = $ARGV[0]; |
|
| 10 |
+my $ramno = abs(int($ARGV[1])); |
|
| 11 |
+ |
|
| 12 |
+open BINFILE, "<", $binfile or die "cannot read \"$binfile\": "; |
|
| 13 |
+binmode BINFILE; |
|
| 14 |
+ |
|
| 15 |
+print <<EOF; |
|
| 16 |
+LIBRARY IEEE; |
|
| 17 |
+USE IEEE.STD_LOGIC_1164.ALL; |
|
| 18 |
+USE IEEE.NUMERIC_STD.ALL; |
|
| 19 |
+ |
|
| 20 |
+ENTITY e_ram_$ramno IS |
|
| 21 |
+ GENERIC ( |
|
| 22 |
+ addr_width: natural |
|
| 23 |
+ ); |
|
| 24 |
+ PORT ( |
|
| 25 |
+ clk: IN std_logic; |
|
| 26 |
+ i_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 27 |
+ o_rd_data: OUT std_logic_vector( 7 DOWNTO 0); |
|
| 28 |
+ i_wr_data: IN std_logic_vector( 7 DOWNTO 0); |
|
| 29 |
+ i_wr_en: IN std_logic |
|
| 30 |
+ ); |
|
| 31 |
+END ENTITY e_ram_$ramno; |
|
| 32 |
+ |
|
| 33 |
+ARCHITECTURE a_ram_$ramno OF e_ram_$ramno IS |
|
| 34 |
+ |
|
| 35 |
+ SUBTYPE t_addr IS std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 36 |
+ SUBTYPE t_data IS std_logic_vector( 7 DOWNTO 0); |
|
| 37 |
+ TYPE t_buf IS ARRAY(0 TO 2 ** addr_width - 1) OF t_data; |
|
| 38 |
+ |
|
| 39 |
+ SIGNAL s_buf: t_buf := ( |
|
| 40 |
+EOF |
|
| 41 |
+ |
|
| 42 |
+my $addr = 0; |
|
| 43 |
+my $data; |
|
| 44 |
+while (read(BINFILE, $data, 4)) {
|
|
| 45 |
+ my @d = unpack("CCCC", $data);
|
|
| 46 |
+ printf " %d => X\"%02X\",\n", $addr, $d[$ramno]; |
|
| 47 |
+ ++$addr; |
|
| 48 |
+} |
|
| 49 |
+ |
|
| 50 |
+print <<EOF; |
|
| 51 |
+ OTHERS => X"00" |
|
| 52 |
+ ); |
|
| 53 |
+ |
|
| 54 |
+BEGIN |
|
| 55 |
+ |
|
| 56 |
+ p_ram: PROCESS(clk) |
|
| 57 |
+ BEGIN |
|
| 58 |
+ IF rising_edge(clk) THEN |
|
| 59 |
+ IF i_wr_en = '1' THEN |
|
| 60 |
+ s_buf(to_integer(unsigned(i_addr))) <= i_wr_data; |
|
| 61 |
+ END IF; |
|
| 62 |
+ o_rd_data <= s_buf(to_integer(unsigned(i_addr))); |
|
| 63 |
+ END IF; |
|
| 64 |
+ END PROCESS p_ram; |
|
| 65 |
+ |
|
| 66 |
+END ARCHITECTURE a_ram_$ramno; |
|
| 67 |
+EOF |
|
| 68 |
+ |
|
| 69 |
+close BINFILE; |
|
| 70 |
+ |
| ... | ... |
@@ -1,22 +0,0 @@ |
| 1 |
-LIBRARY IEEE; |
|
| 2 |
-USE IEEE.STD_LOGIC_1164.ALL; |
|
| 3 |
-USE IEEE.NUMERIC_STD.ALL; |
|
| 4 |
- |
|
| 5 |
-ENTITY e_rom IS |
|
| 6 |
- GENERIC ( |
|
| 7 |
- addr_width: INTEGER |
|
| 8 |
- ); |
|
| 9 |
- PORT ( |
|
| 10 |
- clk: IN std_logic; |
|
| 11 |
- i_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 12 |
- o_data: OUT std_logic_vector( 31 DOWNTO 0) |
|
| 13 |
- ); |
|
| 14 |
-END ENTITY e_rom; |
|
| 15 |
- |
|
| 16 |
-ARCHITECTURE a_rom OF e_rom IS |
|
| 17 |
- |
|
| 18 |
- SUBTYPE t_addr IS std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 19 |
- SUBTYPE t_data IS std_logic_vector( 31 DOWNTO 0); |
|
| 20 |
- TYPE t_buf IS ARRAY(0 TO 2 ** addr_width - 1) OF t_data; |
|
| 21 |
- |
|
| 22 |
- SIGNAL s_buf: t_buf := ( |
| ... | ... |
@@ -0,0 +1,63 @@ |
| 1 |
+#! /usr/bin/perl |
|
| 2 |
+ |
|
| 3 |
+use strict; |
|
| 4 |
+use warnings; |
|
| 5 |
+ |
|
| 6 |
+if (@ARGV < 1) {
|
|
| 7 |
+ die "usage: $0 <binary file>\n"; |
|
| 8 |
+} |
|
| 9 |
+my $binfile = $ARGV[0]; |
|
| 10 |
+ |
|
| 11 |
+open BINFILE, "<", $binfile or die "cannot read \"$binfile\": "; |
|
| 12 |
+binmode BINFILE; |
|
| 13 |
+ |
|
| 14 |
+print <<EOF; |
|
| 15 |
+LIBRARY IEEE; |
|
| 16 |
+USE IEEE.STD_LOGIC_1164.ALL; |
|
| 17 |
+USE IEEE.NUMERIC_STD.ALL; |
|
| 18 |
+ |
|
| 19 |
+ENTITY e_rom IS |
|
| 20 |
+ GENERIC ( |
|
| 21 |
+ addr_width: natural |
|
| 22 |
+ ); |
|
| 23 |
+ PORT ( |
|
| 24 |
+ clk: IN std_logic; |
|
| 25 |
+ i_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 26 |
+ o_data: OUT std_logic_vector( 31 DOWNTO 0) |
|
| 27 |
+ ); |
|
| 28 |
+END ENTITY e_rom; |
|
| 29 |
+ |
|
| 30 |
+ARCHITECTURE a_rom OF e_rom IS |
|
| 31 |
+ |
|
| 32 |
+ SUBTYPE t_addr IS std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 33 |
+ SUBTYPE t_data IS std_logic_vector( 31 DOWNTO 0); |
|
| 34 |
+ TYPE t_buf IS ARRAY(0 TO 2 ** addr_width - 1) OF t_data; |
|
| 35 |
+ |
|
| 36 |
+ SIGNAL s_buf: t_buf := ( |
|
| 37 |
+EOF |
|
| 38 |
+ |
|
| 39 |
+my $addr = 0; |
|
| 40 |
+my $data; |
|
| 41 |
+while (read(BINFILE, $data, 4)) {
|
|
| 42 |
+ my @d = unpack("CCCC", $data);
|
|
| 43 |
+ printf " %d => X\"%02X%02X%02X%02X\",\n", |
|
| 44 |
+ $addr, $d[3], $d[2], $d[1], $d[0]; |
|
| 45 |
+ ++$addr; |
|
| 46 |
+} |
|
| 47 |
+ |
|
| 48 |
+print <<EOF; |
|
| 49 |
+ OTHERS => X"00000000" |
|
| 50 |
+ ); |
|
| 51 |
+ |
|
| 52 |
+BEGIN |
|
| 53 |
+ |
|
| 54 |
+ p_rom: PROCESS(clk) |
|
| 55 |
+ BEGIN |
|
| 56 |
+ IF rising_edge(clk) THEN |
|
| 57 |
+ o_data <= s_buf(to_integer(unsigned(i_addr))); |
|
| 58 |
+ END IF; |
|
| 59 |
+ END PROCESS p_rom; |
|
| 60 |
+ |
|
| 61 |
+END ARCHITECTURE a_rom; |
|
| 62 |
+EOF |
|
| 63 |
+ |
| ... | ... |
@@ -28,8 +28,8 @@ |
| 28 | 28 |
<association xil_pn:name="Implementation" xil_pn:seqID="8"/> |
| 29 | 29 |
</file> |
| 30 | 30 |
<file xil_pn:name="mips/core.vhd" xil_pn:type="FILE_VHDL"> |
| 31 |
- <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="11"/> |
|
| 32 |
- <association xil_pn:name="Implementation" xil_pn:seqID="11"/> |
|
| 31 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="10"/> |
|
| 32 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="10"/> |
|
| 33 | 33 |
</file> |
| 34 | 34 |
<file xil_pn:name="mips/regs.vhd" xil_pn:type="FILE_VHDL"> |
| 35 | 35 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="3"/> |
| ... | ... |
@@ -51,27 +51,23 @@ |
| 51 | 51 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="4"/> |
| 52 | 52 |
<association xil_pn:name="Implementation" xil_pn:seqID="4"/> |
| 53 | 53 |
</file> |
| 54 |
- <file xil_pn:name="system/ram.vhd" xil_pn:type="FILE_VHDL"> |
|
| 55 |
- <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="10"/> |
|
| 56 |
- <association xil_pn:name="Implementation" xil_pn:seqID="10"/> |
|
| 57 |
- </file> |
|
| 58 | 54 |
<file xil_pn:name="system/system.vhd" xil_pn:type="FILE_VHDL"> |
| 59 |
- <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="16"/> |
|
| 60 |
- <association xil_pn:name="Implementation" xil_pn:seqID="16"/> |
|
| 55 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="19"/> |
|
| 56 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="19"/> |
|
| 61 | 57 |
</file> |
| 62 | 58 |
<file xil_pn:name="test/testbed.vhd" xil_pn:type="FILE_VHDL"> |
| 63 |
- <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="17"/> |
|
| 59 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="20"/> |
|
| 64 | 60 |
<association xil_pn:name="PostMapSimulation" xil_pn:seqID="128"/> |
| 65 | 61 |
<association xil_pn:name="PostRouteSimulation" xil_pn:seqID="128"/> |
| 66 | 62 |
<association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="128"/> |
| 67 | 63 |
</file> |
| 68 | 64 |
<file xil_pn:name="fw/rom.vhd" xil_pn:type="FILE_VHDL"> |
| 69 |
- <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="15"/> |
|
| 70 |
- <association xil_pn:name="Implementation" xil_pn:seqID="15"/> |
|
| 65 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="14"/> |
|
| 66 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="14"/> |
|
| 71 | 67 |
</file> |
| 72 | 68 |
<file xil_pn:name="io/leds.vhd" xil_pn:type="FILE_VHDL"> |
| 73 |
- <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="12"/> |
|
| 74 |
- <association xil_pn:name="Implementation" xil_pn:seqID="12"/> |
|
| 69 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="11"/> |
|
| 70 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="11"/> |
|
| 75 | 71 |
</file> |
| 76 | 72 |
<file xil_pn:name="constraints/leds.ucf" xil_pn:type="FILE_UCF"> |
| 77 | 73 |
<association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
| ... | ... |
@@ -83,13 +79,13 @@ |
| 83 | 79 |
<association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
| 84 | 80 |
</file> |
| 85 | 81 |
<file xil_pn:name="io/cyc_cnt.vhd" xil_pn:type="FILE_VHDL"> |
| 86 |
- <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="14"/> |
|
| 87 |
- <association xil_pn:name="Implementation" xil_pn:seqID="14"/> |
|
| 88 |
- </file> |
|
| 89 |
- <file xil_pn:name="io/lcd.vhd" xil_pn:type="FILE_VHDL"> |
|
| 90 | 82 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="13"/> |
| 91 | 83 |
<association xil_pn:name="Implementation" xil_pn:seqID="13"/> |
| 92 | 84 |
</file> |
| 85 |
+ <file xil_pn:name="io/lcd.vhd" xil_pn:type="FILE_VHDL"> |
|
| 86 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="12"/> |
|
| 87 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="12"/> |
|
| 88 |
+ </file> |
|
| 93 | 89 |
<file xil_pn:name="io/lcd_pins.vhd" xil_pn:type="FILE_VHDL"> |
| 94 | 90 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="9"/> |
| 95 | 91 |
<association xil_pn:name="Implementation" xil_pn:seqID="9"/> |
| ... | ... |
@@ -97,6 +93,22 @@ |
| 97 | 93 |
<file xil_pn:name="constraints/lcd.ucf" xil_pn:type="FILE_UCF"> |
| 98 | 94 |
<association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
| 99 | 95 |
</file> |
| 96 |
+ <file xil_pn:name="fw/ram.0.vhd" xil_pn:type="FILE_VHDL"> |
|
| 97 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="18"/> |
|
| 98 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="18"/> |
|
| 99 |
+ </file> |
|
| 100 |
+ <file xil_pn:name="fw/ram.1.vhd" xil_pn:type="FILE_VHDL"> |
|
| 101 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="17"/> |
|
| 102 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="17"/> |
|
| 103 |
+ </file> |
|
| 104 |
+ <file xil_pn:name="fw/ram.2.vhd" xil_pn:type="FILE_VHDL"> |
|
| 105 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="16"/> |
|
| 106 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="16"/> |
|
| 107 |
+ </file> |
|
| 108 |
+ <file xil_pn:name="fw/ram.3.vhd" xil_pn:type="FILE_VHDL"> |
|
| 109 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="15"/> |
|
| 110 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="15"/> |
|
| 111 |
+ </file> |
|
| 100 | 112 |
</files> |
| 101 | 113 |
|
| 102 | 114 |
<properties> |
| ... | ... |
@@ -1,40 +0,0 @@ |
| 1 |
-LIBRARY IEEE; |
|
| 2 |
-USE IEEE.STD_LOGIC_1164.ALL; |
|
| 3 |
-USE IEEE.NUMERIC_STD.ALL; |
|
| 4 |
- |
|
| 5 |
-ENTITY e_ram IS |
|
| 6 |
- GENERIC ( |
|
| 7 |
- addr_width: natural; |
|
| 8 |
- data_width: natural |
|
| 9 |
- ); |
|
| 10 |
- PORT ( |
|
| 11 |
- clk: IN std_logic; |
|
| 12 |
- i_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 13 |
- o_rd_data: OUT std_logic_vector(data_width - 1 DOWNTO 0); |
|
| 14 |
- i_wr_data: IN std_logic_vector(data_width - 1 DOWNTO 0); |
|
| 15 |
- i_wr_en: IN std_logic |
|
| 16 |
- ); |
|
| 17 |
-END ENTITY e_ram; |
|
| 18 |
- |
|
| 19 |
-ARCHITECTURE a_ram OF e_ram IS |
|
| 20 |
- |
|
| 21 |
- SUBTYPE t_addr IS std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 22 |
- SUBTYPE t_data IS std_logic_vector(data_width - 1 DOWNTO 0); |
|
| 23 |
- TYPE t_buf IS ARRAY(0 TO 2 ** addr_width - 1) OF t_data; |
|
| 24 |
- |
|
| 25 |
- SIGNAL s_buf: t_buf; |
|
| 26 |
- |
|
| 27 |
-BEGIN |
|
| 28 |
- |
|
| 29 |
- p_ram: PROCESS(clk) |
|
| 30 |
- BEGIN |
|
| 31 |
- IF rising_edge(clk) THEN |
|
| 32 |
- IF i_wr_en = '1' THEN |
|
| 33 |
- s_buf(to_integer(unsigned(i_addr))) <= i_wr_data; |
|
| 34 |
- END IF; |
|
| 35 |
- o_rd_data <= s_buf(to_integer(unsigned(i_addr))); |
|
| 36 |
- END IF; |
|
| 37 |
- END PROCESS p_ram; |
|
| 38 |
- |
|
| 39 |
-END ARCHITECTURE a_ram; |
|
| 40 |
- |
| ... | ... |
@@ -50,7 +50,7 @@ ARCHITECTURE a_system OF e_system IS |
| 50 | 50 |
|
| 51 | 51 |
COMPONENT e_rom IS |
| 52 | 52 |
GENERIC ( |
| 53 |
- addr_width: INTEGER |
|
| 53 |
+ addr_width: natural |
|
| 54 | 54 |
); |
| 55 | 55 |
PORT ( |
| 56 | 56 |
clk: IN std_logic; |
| ... | ... |
@@ -59,19 +59,57 @@ ARCHITECTURE a_system OF e_system IS |
| 59 | 59 |
); |
| 60 | 60 |
END COMPONENT e_rom; |
| 61 | 61 |
|
| 62 |
- COMPONENT e_ram IS |
|
| 62 |
+ COMPONENT e_ram_0 IS |
|
| 63 | 63 |
GENERIC ( |
| 64 |
- addr_width: natural; |
|
| 65 |
- data_width: natural |
|
| 64 |
+ addr_width: natural |
|
| 66 | 65 |
); |
| 67 | 66 |
PORT ( |
| 68 | 67 |
clk: IN std_logic; |
| 69 | 68 |
i_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); |
| 70 |
- o_rd_data: OUT std_logic_vector(data_width - 1 DOWNTO 0); |
|
| 71 |
- i_wr_data: IN std_logic_vector(data_width - 1 DOWNTO 0); |
|
| 69 |
+ o_rd_data: OUT std_logic_vector( 7 DOWNTO 0); |
|
| 70 |
+ i_wr_data: IN std_logic_vector( 7 DOWNTO 0); |
|
| 72 | 71 |
i_wr_en: IN std_logic |
| 73 | 72 |
); |
| 74 |
- END COMPONENT e_ram; |
|
| 73 |
+ END COMPONENT e_ram_0; |
|
| 74 |
+ |
|
| 75 |
+ COMPONENT e_ram_1 IS |
|
| 76 |
+ GENERIC ( |
|
| 77 |
+ addr_width: natural |
|
| 78 |
+ ); |
|
| 79 |
+ PORT ( |
|
| 80 |
+ clk: IN std_logic; |
|
| 81 |
+ i_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 82 |
+ o_rd_data: OUT std_logic_vector( 7 DOWNTO 0); |
|
| 83 |
+ i_wr_data: IN std_logic_vector( 7 DOWNTO 0); |
|
| 84 |
+ i_wr_en: IN std_logic |
|
| 85 |
+ ); |
|
| 86 |
+ END COMPONENT e_ram_1; |
|
| 87 |
+ |
|
| 88 |
+ COMPONENT e_ram_2 IS |
|
| 89 |
+ GENERIC ( |
|
| 90 |
+ addr_width: natural |
|
| 91 |
+ ); |
|
| 92 |
+ PORT ( |
|
| 93 |
+ clk: IN std_logic; |
|
| 94 |
+ i_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 95 |
+ o_rd_data: OUT std_logic_vector( 7 DOWNTO 0); |
|
| 96 |
+ i_wr_data: IN std_logic_vector( 7 DOWNTO 0); |
|
| 97 |
+ i_wr_en: IN std_logic |
|
| 98 |
+ ); |
|
| 99 |
+ END COMPONENT e_ram_2; |
|
| 100 |
+ |
|
| 101 |
+ COMPONENT e_ram_3 IS |
|
| 102 |
+ GENERIC ( |
|
| 103 |
+ addr_width: natural |
|
| 104 |
+ ); |
|
| 105 |
+ PORT ( |
|
| 106 |
+ clk: IN std_logic; |
|
| 107 |
+ i_addr: IN std_logic_vector(addr_width - 1 DOWNTO 0); |
|
| 108 |
+ o_rd_data: OUT std_logic_vector( 7 DOWNTO 0); |
|
| 109 |
+ i_wr_data: IN std_logic_vector( 7 DOWNTO 0); |
|
| 110 |
+ i_wr_en: IN std_logic |
|
| 111 |
+ ); |
|
| 112 |
+ END COMPONENT e_ram_3; |
|
| 75 | 113 |
|
| 76 | 114 |
COMPONENT e_io_leds IS |
| 77 | 115 |
PORT ( |
| ... | ... |
@@ -173,20 +211,53 @@ BEGIN |
| 173 | 211 |
END IF; |
| 174 | 212 |
END PROCESS p_dbus; |
| 175 | 213 |
|
| 176 |
- data: FOR i IN 0 TO 3 GENERATE |
|
| 177 |
- databank: e_ram |
|
| 214 |
+ data_0: e_ram_0 |
|
| 215 |
+ GENERIC MAP ( |
|
| 216 |
+ addr_width => 10 |
|
| 217 |
+ ) |
|
| 218 |
+ PORT MAP ( |
|
| 219 |
+ clk => clk, |
|
| 220 |
+ i_addr => s_data_addr(11 DOWNTO 2), |
|
| 221 |
+ o_rd_data => s_data_rd_data(7 DOWNTO 0), |
|
| 222 |
+ i_wr_data => s_data_wr_data(7 DOWNTO 0), |
|
| 223 |
+ i_wr_en => s_data_wr_en(0) |
|
| 224 |
+ ); |
|
| 225 |
+ |
|
| 226 |
+ data_1: e_ram_1 |
|
| 227 |
+ GENERIC MAP ( |
|
| 228 |
+ addr_width => 10 |
|
| 229 |
+ ) |
|
| 230 |
+ PORT MAP ( |
|
| 231 |
+ clk => clk, |
|
| 232 |
+ i_addr => s_data_addr(11 DOWNTO 2), |
|
| 233 |
+ o_rd_data => s_data_rd_data(15 DOWNTO 8), |
|
| 234 |
+ i_wr_data => s_data_wr_data(15 DOWNTO 8), |
|
| 235 |
+ i_wr_en => s_data_wr_en(1) |
|
| 236 |
+ ); |
|
| 237 |
+ |
|
| 238 |
+ data_2: e_ram_2 |
|
| 239 |
+ GENERIC MAP ( |
|
| 240 |
+ addr_width => 10 |
|
| 241 |
+ ) |
|
| 242 |
+ PORT MAP ( |
|
| 243 |
+ clk => clk, |
|
| 244 |
+ i_addr => s_data_addr(11 DOWNTO 2), |
|
| 245 |
+ o_rd_data => s_data_rd_data(23 DOWNTO 16), |
|
| 246 |
+ i_wr_data => s_data_wr_data(23 DOWNTO 16), |
|
| 247 |
+ i_wr_en => s_data_wr_en(2) |
|
| 248 |
+ ); |
|
| 249 |
+ |
|
| 250 |
+ data_3: e_ram_3 |
|
| 178 | 251 |
GENERIC MAP ( |
| 179 |
- addr_width => 10, |
|
| 180 |
- data_width => 8 |
|
| 252 |
+ addr_width => 10 |
|
| 181 | 253 |
) |
| 182 | 254 |
PORT MAP ( |
| 183 | 255 |
clk => clk, |
| 184 | 256 |
i_addr => s_data_addr(11 DOWNTO 2), |
| 185 |
- o_rd_data => s_data_rd_data(i*8+7 DOWNTO i*8), |
|
| 186 |
- i_wr_data => s_data_wr_data(i*8+7 DOWNTO i*8), |
|
| 187 |
- i_wr_en => s_data_wr_en(i) |
|
| 257 |
+ o_rd_data => s_data_rd_data(31 DOWNTO 24), |
|
| 258 |
+ i_wr_data => s_data_wr_data(31 DOWNTO 24), |
|
| 259 |
+ i_wr_en => s_data_wr_en(3) |
|
| 188 | 260 |
); |
| 189 |
- END GENERATE data; |
|
| 190 | 261 |
|
| 191 | 262 |
leds: e_io_leds |
| 192 | 263 |
PORT MAP ( |
| 193 | 264 |