hello: simplify interconnect
This commit is contained in:
parent
50dedf1dd8
commit
3b56750a73
121
first/hello.vhdl
121
first/hello.vhdl
@ -4,32 +4,34 @@ use ieee.numeric_std.all;
|
||||
use std.textio.all;
|
||||
|
||||
entity hello is
|
||||
port(
|
||||
clk: in std_logic;
|
||||
rst: in std_logic;
|
||||
port
|
||||
(
|
||||
clk: in std_logic;
|
||||
rst: in std_logic;
|
||||
|
||||
led: out std_logic_vector(7 downto 0);
|
||||
led: out std_logic_vector(7 downto 0);
|
||||
|
||||
uart_rx: in std_logic;
|
||||
uart_tx: out std_logic
|
||||
);
|
||||
uart_rx: in std_logic;
|
||||
uart_tx: out std_logic
|
||||
);
|
||||
end hello;
|
||||
|
||||
architecture rtl of hello is
|
||||
|
||||
component cpu is port(
|
||||
clk: in std_logic;
|
||||
rst: in std_logic;
|
||||
component cpu is port
|
||||
(
|
||||
clk: in std_logic;
|
||||
rst: in std_logic;
|
||||
|
||||
code_data: in std_logic_vector(15 downto 0);
|
||||
code_addr: out std_logic_vector(15 downto 0);
|
||||
code_data: in std_logic_vector(15 downto 0);
|
||||
code_addr: out std_logic_vector(15 downto 0);
|
||||
|
||||
mem_in: in std_logic_vector(15 downto 0);
|
||||
mem_out: out std_logic_vector(15 downto 0);
|
||||
mem_addr: out std_logic_vector(15 downto 0);
|
||||
mem_write: out std_logic;
|
||||
mem_read: out std_logic
|
||||
);
|
||||
mem_in: in std_logic_vector(15 downto 0);
|
||||
mem_out: out std_logic_vector(15 downto 0);
|
||||
mem_addr: out std_logic_vector(15 downto 0);
|
||||
mem_write: out std_logic;
|
||||
mem_read: out std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
-- component boot_rom IS
|
||||
@ -55,48 +57,51 @@ architecture rtl of hello is
|
||||
--END COMPONENT;
|
||||
|
||||
component ram is
|
||||
generic (
|
||||
addressWidth : in positive := 16;
|
||||
busWidth : in positive := 16;
|
||||
size : in positive := 1024
|
||||
);
|
||||
port (
|
||||
clk : in std_logic;
|
||||
address : in std_logic_vector(addressWidth - 1 downto 0);
|
||||
writeEnable : in std_logic;
|
||||
dataIn : in std_logic_vector(busWidth - 1 downto 0);
|
||||
dataOut : out std_logic_vector(busWidth - 1 downto 0)
|
||||
);
|
||||
generic
|
||||
(
|
||||
addressWidth : in positive := 16;
|
||||
busWidth : in positive := 16;
|
||||
size : in positive := 1024
|
||||
);
|
||||
port
|
||||
(
|
||||
clk : in std_logic;
|
||||
address : in std_logic_vector(addressWidth - 1 downto 0);
|
||||
writeEnable : in std_logic;
|
||||
dataIn : in std_logic_vector(busWidth - 1 downto 0);
|
||||
dataOut : out std_logic_vector(busWidth - 1 downto 0)
|
||||
);
|
||||
end component;
|
||||
|
||||
component boot_rom is port (
|
||||
clk: in std_logic;
|
||||
component boot_rom is port
|
||||
(
|
||||
clk: in std_logic;
|
||||
|
||||
code_addr : in std_logic_vector(15 downto 0);
|
||||
code_out : out std_logic_vector(15 downto 0);
|
||||
code_addr : in std_logic_vector(15 downto 0);
|
||||
code_out : out std_logic_vector(15 downto 0);
|
||||
|
||||
data_addr : in std_logic_vector(15 downto 0);
|
||||
data_out : out std_logic_vector(15 downto 0)
|
||||
);
|
||||
data_addr : in std_logic_vector(15 downto 0);
|
||||
data_out : out std_logic_vector(15 downto 0)
|
||||
);
|
||||
end component;
|
||||
|
||||
component uart is
|
||||
port
|
||||
(
|
||||
clk : in std_logic;
|
||||
rst : in std_logic;
|
||||
port
|
||||
(
|
||||
clk : in std_logic;
|
||||
rst : in std_logic;
|
||||
|
||||
-- hardware
|
||||
rx_pin : in std_logic;
|
||||
tx_pin : out std_logic;
|
||||
rx_pin : in std_logic;
|
||||
tx_pin : out std_logic;
|
||||
|
||||
-- bus interface
|
||||
we : in std_logic;
|
||||
re : in std_logic;
|
||||
addr : in std_logic_vector(15 downto 0);
|
||||
din : in std_logic_vector(15 downto 0);
|
||||
dout : out std_logic_vector(15 downto 0)
|
||||
);
|
||||
we : in std_logic;
|
||||
re : in std_logic;
|
||||
addr : in std_logic_vector(15 downto 0);
|
||||
din : in std_logic_vector(15 downto 0);
|
||||
dout : out std_logic_vector(15 downto 0)
|
||||
);
|
||||
end component;
|
||||
|
||||
signal mem_write, mem_read: std_logic;
|
||||
@ -128,7 +133,8 @@ begin
|
||||
-- system map
|
||||
-- 0x0000 - 0x0fff ROM
|
||||
-- 0x1000 - 0x1fff RAM
|
||||
-- 0xc000 - 0xc000 GPIO?
|
||||
-- 0xc000 - 0xc00f LED
|
||||
-- 0xc010 - 0xc01f UART
|
||||
|
||||
led <= led_r;
|
||||
|
||||
@ -148,27 +154,24 @@ begin
|
||||
|
||||
bus_miso <= x"0000";
|
||||
|
||||
rom_data_addr <= x"0000";
|
||||
rom_data_addr <= bus_addr and x"0fff";
|
||||
|
||||
mem_addr <= x"0000";
|
||||
mem_in <= x"0000";
|
||||
mem_addr <= bus_addr and x"0fff";
|
||||
mem_in <= bus_mosi;
|
||||
mem_write <= '0';
|
||||
|
||||
led_next <= led_r;
|
||||
|
||||
uart_din <= x"0000";
|
||||
uart_addr <= x"0000";
|
||||
uart_din <= bus_mosi;
|
||||
uart_addr <= bus_addr and x"000f";
|
||||
uart_we <= '0';
|
||||
uart_re <= '0';
|
||||
|
||||
case bus_addr(15 downto 12) is
|
||||
when x"0" =>
|
||||
bus_miso <= rom_data_out;
|
||||
rom_data_addr <= bus_addr and x"0fff";
|
||||
when x"1" =>
|
||||
mem_in <= bus_mosi;
|
||||
bus_miso <= mem_out;
|
||||
mem_addr <= bus_addr and x"0fff";
|
||||
mem_write <= bus_write;
|
||||
when x"c" =>
|
||||
case bus_addr(7 downto 4) is
|
||||
@ -177,9 +180,7 @@ begin
|
||||
led_next <= bus_mosi(7 downto 0);
|
||||
end if;
|
||||
when x"1" => -- UART
|
||||
uart_din <= bus_mosi;
|
||||
bus_miso <= uart_dout;
|
||||
uart_addr <= bus_addr and x"000f";
|
||||
uart_we <= bus_write;
|
||||
uart_re <= bus_read;
|
||||
when others =>
|
||||
|
Loading…
Reference in New Issue
Block a user