Commit 1e965514 authored by Tristan Gingold's avatar Tristan Gingold

diot_urv_top: first working demo (leds).

parent 467b5c82
......@@ -28,12 +28,14 @@ use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.genram_pkg.all;
use work.memory_loader_pkg.all;
use work.wishbone_pkg.all;
use work.urv_pkg.all;
entity fip_urv is
generic(
g_IRAM_LOG_SIZE : natural := 14;
g_IRAM_LOG_SIZE : natural := 12;
g_DRAM_LOG_SIZE : natural := 12;
g_IRAM_INIT : string);
port(
clk_sys_i : in std_logic;
......@@ -89,7 +91,6 @@ architecture arch of fip_urv is
signal dm_data_write : std_logic;
signal dwb_out : t_wishbone_master_out;
signal bus_timeout_cnt : unsigned(7 downto 0);
begin
dwb_o <= dwb_out;
......@@ -126,36 +127,41 @@ begin
dm_data_write <= not dm_is_wishbone and dm_store;
U_iram : generic_dpram
generic map (
g_DATA_WIDTH => 32,
g_SIZE => 2**(g_IRAM_LOG_SIZE - 2),
g_WITH_BYTE_ENABLE => TRUE,
g_ADDR_CONFLICT_RESOLUTION => "dont_care",
g_INIT_FILE => g_IRAM_INIT,
g_FAIL_IF_FILE_NOT_FOUND => FALSE,
g_DUAL_CLOCK => FALSE)
port map (
rst_n_i => rst_n_i,
clka_i => clk_sys_i,
bwea_i => "1111",
wea_i => '0',
aa_i => im_addr(g_IRAM_LOG_SIZE - 1 downto 2),
da_i => x"0000_0000",
qa_o => im_data,
clkb_i => clk_sys_i,
bweb_i => dm_data_select,
web_i => dm_data_write,
ab_i => dm_addr(g_IRAM_LOG_SIZE - 1 downto 2),
db_i => dm_data_s,
qb_o => dm_mem_rdata);
p_rom: process (clk_sys_i)
is
constant IRAM_WSIZE : natural := 2 ** (g_IRAM_LOG_SIZE - 2);
constant mem : t_ram32_type(0 to IRAM_WSIZE - 1) :=
f_load_mem32_from_file (g_IRAM_INIT, IRAM_WSIZE, True);
begin
if rising_edge(clk_sys_i) then
im_data <= mem (to_integer(unsigned(im_addr(g_IRAM_LOG_SIZE - 1 downto 2))));
end if;
end process;
-- 1st MByte of the mem is the IRAM
dm_is_wishbone <= '1' when dm_addr(31 downto 20) /= x"000" else '0';
dm_data_write <= not dm_is_wishbone and dm_store;
dm_data_l <= dm_wb_rdata when dm_select_wb = '1' else dm_mem_rdata;
p_ram: process (clk_sys_i)
is
variable mem : t_ram32_type (2**(g_DRAM_LOG_SIZE - 2) - 1 downto 0);
variable addr : natural range mem'range;
begin
if rising_edge(clk_sys_i) then
addr := to_integer(unsigned(dm_addr(g_DRAM_LOG_SIZE - 1 downto 2)));
dm_mem_rdata <= mem(addr);
if dm_data_write = '1' then
for i in 0 to 3 loop
if dm_data_select (i) = '1' then
mem(addr)(8*i + 7 downto 8*i) := dm_data_s(8*i + 7 downto 8*i);
end if;
end loop;
end if;
end if;
end process;
-- Wishbone bus arbitration / internal RAM access
p_wishbone_master : process(clk_sys_i)
begin
......@@ -202,7 +208,6 @@ begin
dm_load_done <= '0';
dm_store_done <= '0';
dm_cycle_in_progress <= '1';
bus_timeout_cnt <= (others => '0');
else
dm_store_done <= '0';
dm_load_done <= '0';
......@@ -215,9 +220,7 @@ begin
dwb_out.stb <= '0';
end if;
bus_timeout_cnt <= bus_timeout_cnt + 1;
if dwb_i.ack = '1' or bus_timeout_cnt = 100 then
if dwb_i.ack = '1' then
if dm_wb_write = '0' then
dm_wb_rdata <= f_x_to_zero(dwb_i.dat);
dm_select_wb <= '1';
......
......@@ -11,4 +11,6 @@ syn_project = "diot_urv_demo"
top_module = "diot_urv_top"
syn_tool = "libero"
files = ['diot_wic_demo.pdc', 'diot_wic_demo.sdc']
modules = { "local" : [ "../../top/diot_urv_demo"] }
##==== E-links banks (P2v5) ====##
set_iobank Bank0 -vcci 2.50 -fixed yes
set_iobank Bank5 -vcci 2.50 -fixed yes
set_iobank Bank6 -vcci 2.50 -fixed yes
set_iobank Bank7 -vcci 2.50 -fixed yes
set_io {por_n_b} -pinname T28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
## I/Os assignments
set_io {clk_25m_i} -pinname R1 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {button_i} -pinname B3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {ack_i} -pinname K4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {adr_o[0]} -pinname F3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[1]} -pinname G3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[2]} -pinname J4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[3]} -pinname J3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[4]} -pinname H10 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[5]} -pinname H9 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[6]} -pinname L4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[7]} -pinname L3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[8]} -pinname N1 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {adr_o[9]} -pinname P1 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {cyc_o} -pinname H11 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {dat_i[0]} -pinname F9 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {dat_i[1]} -pinname F8 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {dat_i[2]} -pinname N4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {dat_i[3]} -pinname P4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {dat_i[4]} -pinname N5 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {dat_i[5]} -pinname P5 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {dat_i[6]} -pinname N2 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {dat_i[7]} -pinname P2 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {dat_o[0]} -pinname M3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {dat_o[1]} -pinname M4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {dat_o[2]} -pinname D9 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {dat_o[3]} -pinname C9 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {dat_o[4]} -pinname K8 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {dat_o[5]} -pinname K7 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {dat_o[6]} -pinname G10 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {dat_o[7]} -pinname F10 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {nostat_o} -pinname L5 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {p3_lgth_o[0]} -pinname H3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {p3_lgth_o[1]} -pinname J11 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {p3_lgth_o[2]} -pinname K3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {rst_o} -pinname M5 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {rstin_o} -pinname N3 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {stb_o} -pinname L9 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {var1_acc_o} -pinname L2 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {var1_rdy_i} -pinname L1 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {var2_acc_o} -pinname F4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {var2_rdy_i} -pinname G4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {var3_acc_o} -pinname K2 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {var3_rdy_i} -pinname K1 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE -schmitt_trigger OFF -in_delay OFF
set_io {wclk_o} -pinname N8 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {we_o} -pinname H4 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {leds_o[0]} -pinname AG1 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {leds_o[1]} -pinname AB6 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {leds_o[2]} -pinname AD2 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {leds_o[3]} -pinname AA7 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {leds_o[4]} -pinname AF2 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {leds_o[5]} -pinname AE1 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
### Backplane I/O assignments
#set_io {diag_scl_b} -pinname J15 -fixed YES -iostd LVCMOS25
#set_io {diag_sda_b} -pinname E14 -fixed YES -iostd LVCMOS25
set_io {s1_p_b[0]} -pinname A27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[0]} -pinname B26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[1]} -pinname F20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[1]} -pinname E20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[2]} -pinname G21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[2]} -pinname G20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[3]} -pinname A21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[3]} -pinname A20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[4]} -pinname C23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[4]} -pinname C22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[5]} -pinname D20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[5]} -pinname D19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[6]} -pinname AE27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[6]} -pinname AE26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[7]} -pinname AB25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[7]} -pinname AC25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[8]} -pinname W23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[8]} -pinname Y23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[9]} -pinname AC27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[9]} -pinname AD27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[10]} -pinname E27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[10]} -pinname D26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[11]} -pinname E19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[11]} -pinname F19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[12]} -pinname P27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[12]} -pinname P28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[13]} -pinname J27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[13]} -pinname J28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[14]} -pinname AE22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[14]} -pinname AF22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_p_b[15]} -pinname AC21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_n_b[15]} -pinname AC20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[0]} -pinname AH18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[0]} -pinname AG18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[1]} -pinname L25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[1]} -pinname L26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[2]} -pinname U24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[2]} -pinname U25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[3]} -pinname AF19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[3]} -pinname AF18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[4]} -pinname R24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[4]} -pinname T24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[5]} -pinname E18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[5]} -pinname F18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[6]} -pinname N29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[6]} -pinname N30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[7]} -pinname AA26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[7]} -pinname AA25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[8]} -pinname W29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[8]} -pinname Y29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[9]} -pinname L27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[9]} -pinname M27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[10]} -pinname Y30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[10]} -pinname AA30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[11]} -pinname U29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[11]} -pinname V29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[12]} -pinname N28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[12]} -pinname N27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_p_b[13]} -pinname L28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_n_b[13]} -pinname M28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_p_b[14]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_n_b[14]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_p_b[15]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_n_b[15]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[0]} -pinname U22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[0]} -pinname V22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[1]} -pinname K24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[1]} -pinname K23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[2]} -pinname H27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[2]} -pinname H28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[3]} -pinname AE17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[3]} -pinname AE18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[4]} -pinname U23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[4]} -pinname V23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[5]} -pinname E21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[5]} -pinname F21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[6]} -pinname M30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[6]} -pinname L30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[7]} -pinname F28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[7]} -pinname G28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[8]} -pinname AK21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[8]} -pinname AK20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[9]} -pinname AJ19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[9]} -pinname AH19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[10]} -pinname H18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[10]} -pinname H17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[11]} -pinname AJ17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[11]} -pinname AJ16 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[12]} -pinname G19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[12]} -pinname G18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_p_b[13]} -pinname J18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s3_n_b[13]} -pinname J17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s4_p_b[0]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
# Dummy pin
set_io {s4_n_b[0]} -pinname Y26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s4_p_b[1]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
# Dummpy pin
set_io {s4_n_b[1]} -pinname W25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s4_p_b[2]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
# Dummy pin
set_io {s4_n_b[2]} -pinname W26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[3]} -pinname AE30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[3]} -pinname AG30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s4_p_b[4]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
# Dummy pin
set_io {s4_n_b[4]} -pinname P26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s4_p_b[5]} -pinname -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
# Dummy pin
set_io {s4_n_b[5]} -pinname N25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[6]} -pinname W22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[6]} -pinname Y22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[7]} -pinname J25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[7]} -pinname J26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[8]} -pinname AJ23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[8]} -pinname AJ22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[9]} -pinname K25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[9]} -pinname K26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[10]} -pinname G17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[10]} -pinname G16 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[11]} -pinname AG23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[11]} -pinname AG22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[12]} -pinname AH24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[12]} -pinname AH23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_p_b[13]} -pinname AG26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_n_b[13]} -pinname AF25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[0]} -pinname C29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[0]} -pinname D28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[1]} -pinname L24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[1]} -pinname L23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[2]} -pinname U27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[2]} -pinname V27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[3]} -pinname C18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[3]} -pinname B18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[4]} -pinname J20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[4]} -pinname J19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[5]} -pinname AA27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[5]} -pinname AB27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[6]} -pinname B23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[6]} -pinname B22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[7]} -pinname B19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[7]} -pinname C19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[8]} -pinname E23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[8]} -pinname E22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[9]} -pinname C21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[9]} -pinname C20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[10]} -pinname AB29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[10]} -pinname AC29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[11]} -pinname W27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[11]} -pinname Y27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[12]} -pinname A23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[12]} -pinname A22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_p_b[13]} -pinname AB28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_n_b[13]} -pinname AC28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[0]} -pinname U28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[0]} -pinname V28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[1]} -pinname U26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[1]} -pinname V26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[2]} -pinname AJ21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[2]} -pinname AJ20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[3]} -pinname A19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[3]} -pinname A18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[4]} -pinname H25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[4]} -pinname H26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[5]} -pinname J16 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[5]} -pinname H16 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[6]} -pinname AD21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[6]} -pinname AE21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[7]} -pinname AK23 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[7]} -pinname AK22 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[8]} -pinname F17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[8]} -pinname F16 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[9]} -pinname AG25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[9]} -pinname AH25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[10]} -pinname AD19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[10]} -pinname AD18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[11]} -pinname AF21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[11]} -pinname AF20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[12]} -pinname B20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[12]} -pinname B21 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[13]} -pinname E17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[13]} -pinname E16 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[14]} -pinname AB19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[14]} -pinname AB18 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_p_b[15]} -pinname AE19 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_n_b[15]} -pinname AE20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
## I/Os not used by WIC
#set_io {s1_p_b[16]} -pinname B17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[16]} -pinname A17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[17]} -pinname AA20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[17]} -pinname AB20 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[18]} -pinname P29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[18]} -pinname P30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[19]} -pinname AB26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[19]} -pinname AC26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[20]} -pinname V24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[20]} -pinname W24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[21]} -pinname T26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[21]} -pinname R27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[22]} -pinname Y25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[22]} -pinname Y24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[23]} -pinname AA29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[23]} -pinname AA28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[24]} -pinname M24 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[24]} -pinname M25 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_p_b[25]} -pinname AB30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s1_n_b[25]} -pinname AC30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s1_en_i} -pinname K27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#
#set_io {s2_p_b[18]} -pinname H29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_n_b[18]} -pinname H30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_p_b[19]} -pinname T30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_n_b[19]} -pinname U30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_p_b[20]} -pinname W28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_n_b[20]} -pinname Y28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_p_b[21]} -pinname V30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s2_n_b[21]} -pinname W30 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s2_en_i} -pinname F27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#
set_io {s3_en_i} -pinname L29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s4_en_i} -pinname AD29 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s5_en_i} -pinname AD28 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#
#set_io {s7_p_b[16]} -pinname AK27 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s7_n_b[16]} -pinname AJ26 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s7_p_b[17]} -pinname D17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
#set_io {s7_n_b[17]} -pinname D16 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
set_io {s7_en_i} -pinname C17 -fixed YES -iostd LVCMOS25 -register NO -res_pull NONE
# Top Level Design Parameters
# Clocks
create_clock -name {diot_wic_top|clk_25m_i} -period 40.000000 -waveform {0.000000 20.000000} clk_25m_i
# False Paths Between Clocks
# False Path Constraints
# Maximum Delay Constraints
# Multicycle Constraints
# Virtual Clocks
# Output Load Constraints
# Driving Cell Constraints
# Wire Loads
# set_wire_load_mode top
# Other Constraints
......@@ -73,8 +73,8 @@ entity diot_urv_top is
s1_p_b : inout std_logic_vector(15 downto 0);
s1_n_b : inout std_logic_vector(15 downto 0);
s1_en_i : in std_logic;
s2_p_b : inout std_logic_vector(21 downto 0);
s2_n_b : inout std_logic_vector(21 downto 0);
s2_p_b : inout std_logic_vector(13 downto 0);
s2_n_b : inout std_logic_vector(13 downto 0);
s2_en_i : in std_logic;
s3_p_b : inout std_logic_vector(13 downto 0);
s3_n_b : inout std_logic_vector(13 downto 0);
......@@ -162,7 +162,7 @@ begin
begin
if rising_edge(clk_25m_i) then
if (por_n_d(1) = '0' or button_i = '1') then
rst_cnt <= (others=>'1');
rst_cnt <= x"0004"; -- (others=>'1');
elsif rst_cnt /= (15 downto 0 => '0') then
rst_cnt <= rst_cnt - 1;
end if;
......@@ -191,7 +191,7 @@ begin
inst_fip_urv: entity work.fip_urv
generic map (
g_iram_init => ""
g_iram_init => "../../../sw/fip_urv/fip_urv.ram"
)
port map (
clk_sys_i => clk_25m_i,
......@@ -280,7 +280,7 @@ begin
slots_in(4).loops(13 downto 0) <= s5_p_b(13 downto 0);
slots_in(5).loops <= s7_p_b(15 downto 0);
s1_n_b(15 downto 0) <= slots_out(0).relays;
s2_n_b(15 downto 0) <= slots_out(1).relays;
s2_n_b(13 downto 0) <= slots_out(1).relays(13 downto 0);
s3_n_b(13 downto 0) <= slots_out(2).relays(13 downto 0);
s4_n_b(13 downto 6) <= slots_out(3).relays(8 downto 1);
s4_n_b(3) <= slots_out(3).relays(0);
......@@ -294,7 +294,10 @@ begin
slots_in(4).loops(15 downto 14) <= (others=>'0');
end block;
GEN_LEDS_O: for I in 0 to 5 generate
-- Leds: assign to '0' to switch on the led, 'Z' to switch off.
leds_o(0) <= '0' when rst_n = '0' or leds(0) = '1' else '1';
GEN_LEDS_O: for I in 1 to 5 generate
leds_o(I) <= '0' when leds(I) = '1' else
'Z';
end generate;
......
......@@ -13,7 +13,7 @@ CFLAGS = -mabi=ilp32 -march=rv32im -O
OBJS = crt0.o $(OUTPUT).o
LDS = ram.ld
all: $(OUTPUT).hex
all: $(OUTPUT).ram
fip_urv_regs.h: ../../hdl/rtl/urv_wic/fip_urv_regs.cheby
cheby --gen-c=$@ -i $<
......@@ -21,7 +21,7 @@ fip_urv_regs.h: ../../hdl/rtl/urv_wic/fip_urv_regs.cheby
%.bin: %.elf
${OBJCOPY} -O binary $< $@
%.hex: %.bin
%.ram: %.bin
./tobin.py $< > $@
$(OUTPUT).elf: $(LDS) $(OBJS)
......@@ -29,7 +29,7 @@ $(OUTPUT).elf: $(LDS) $(OBJS)
$(SIZE) $@
clean:
rm -f $(OUTPUT).elf $(OUTPUT).bin $(OUTPUT).hex $(OBJS)
rm -f $(OUTPUT).elf $(OUTPUT).bin $(OUTPUT).ram $(OBJS)
%.o: %.S
${XCC} -c $(CFLAGS) $< -o $@
......
......@@ -17,7 +17,7 @@ main (void)
{
/* Check for FIP message. */
regs->leds = leds;
leds = ((leds << 1) & 0x3f) | ((leds >> 6) & 1);
leds = ((leds << 1) & 0x3f) | ((leds >> 5) & 1);
for (j = 0; j < 1000000; j++)
asm volatile ("nop");
}
......
......@@ -12,7 +12,7 @@ def main():
sys.exit("length of {} is not a multiple of 4".format(filename))
for i in range(0, len(b), 4):
v, = struct.unpack('<I', b[i:i+4])
print('{:08x}'.format(v))
print('{:032b}'.format(v))
if __name__ == '__main__':
main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment