Last active
May 13, 2016 04:35
-
-
Save cr1901/e9ed9ba9e7cf8c791a0d0545125a36e4 to your computer and use it in GitHub Desktop.
Xilinx Optimizes Out Sequential Logic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python3 | |
| import argparse | |
| from fractions import Fraction | |
| from migen import * | |
| from migen.genlib.resetsync import AsyncResetSynchronizer | |
| from migen.build.platforms import minispartan6 | |
| from migen.build.generic_platform import * | |
| from misoc.integration.soc_core import * | |
| from misoc.integration.builder import * | |
| from misoc.cores.gpio import GPIOOut | |
| # class BaseSoC(SoCSDRAM): | |
| class BaseSoC(SoCCore): | |
| csr_map.update(SoCCore.csr_map) | |
| def __init__(self, **kwargs): | |
| clk_freq = 32*1000000 | |
| platform = minispartan6.Platform(device="xc6slx25") | |
| SoCCore.__init__(self, platform, clk_freq, | |
| integrated_rom_size=0x8000, **kwargs) | |
| leds = Cat((platform.request("user_led") for p in range(8))) | |
| self.submodules.leds = GPIOOut(leds) | |
| # Comment these three lines out; Xilinx will no longer optimize out logic. | |
| clk32 = platform.request("clk32") | |
| self.clock_domains.cd_sys = ClockDomain() | |
| self.clock_domains.cd_por = ClockDomain() | |
| pulse = Signal(reset=1) | |
| self.comb += [self.cd_por.clk.eq(clk32)] | |
| self.comb += [self.cd_sys.clk.eq(clk32)] | |
| self.comb += [self.cd_sys.rst.eq(pulse)] | |
| self.sync.por += [pulse.eq(0)] | |
| def main(): | |
| parser = argparse.ArgumentParser(description="MiSoC port to the MiniSpartan6") | |
| builder_args(parser) | |
| soc_core_args(parser) | |
| args = parser.parse_args() | |
| soc = BaseSoC(**soc_core_argdict(args)) | |
| builder = Builder(soc, **builder_argdict(args)) | |
| builder.build() | |
| if __name__ == "__main__": | |
| main() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* Machine-generated using Migen */ | |
| module top( | |
| output reg serial_tx, | |
| input serial_rx, | |
| output user_led, | |
| output user_led_1, | |
| output user_led_2, | |
| output user_led_3, | |
| output user_led_4, | |
| output user_led_5, | |
| output user_led_6, | |
| output user_led_7, | |
| input clk32 | |
| ); | |
| wire [29:0] ibus_adr; | |
| wire [31:0] ibus_dat_w; | |
| wire [31:0] ibus_dat_r; | |
| wire [3:0] ibus_sel; | |
| wire ibus_cyc; | |
| wire ibus_stb; | |
| wire ibus_ack; | |
| wire ibus_we; | |
| wire [2:0] ibus_cti; | |
| wire [1:0] ibus_bte; | |
| wire ibus_err; | |
| wire [29:0] dbus_adr; | |
| wire [31:0] dbus_dat_w; | |
| wire [31:0] dbus_dat_r; | |
| wire [3:0] dbus_sel; | |
| wire dbus_cyc; | |
| wire dbus_stb; | |
| wire dbus_ack; | |
| wire dbus_we; | |
| wire [2:0] dbus_cti; | |
| wire [1:0] dbus_bte; | |
| wire dbus_err; | |
| reg [31:0] interrupt = 1'd0; | |
| wire [31:0] i_adr_o; | |
| wire [31:0] d_adr_o; | |
| wire [29:0] rom_bus_adr; | |
| wire [31:0] rom_bus_dat_w; | |
| wire [31:0] rom_bus_dat_r; | |
| wire [3:0] rom_bus_sel; | |
| wire rom_bus_cyc; | |
| wire rom_bus_stb; | |
| reg rom_bus_ack = 1'd0; | |
| wire rom_bus_we; | |
| wire [2:0] rom_bus_cti; | |
| wire [1:0] rom_bus_bte; | |
| reg rom_bus_err = 1'd0; | |
| wire [12:0] rom_adr; | |
| wire [31:0] rom_dat_r; | |
| wire [29:0] sram_bus_adr; | |
| wire [31:0] sram_bus_dat_w; | |
| wire [31:0] sram_bus_dat_r; | |
| wire [3:0] sram_bus_sel; | |
| wire sram_bus_cyc; | |
| wire sram_bus_stb; | |
| reg sram_bus_ack = 1'd0; | |
| wire sram_bus_we; | |
| wire [2:0] sram_bus_cti; | |
| wire [1:0] sram_bus_bte; | |
| reg sram_bus_err = 1'd0; | |
| wire [9:0] sram_adr; | |
| wire [31:0] sram_dat_r; | |
| reg [3:0] sram_we = 1'd0; | |
| wire [31:0] sram_dat_w; | |
| wire [29:0] main_ram_bus_adr; | |
| wire [31:0] main_ram_bus_dat_w; | |
| wire [31:0] main_ram_bus_dat_r; | |
| wire [3:0] main_ram_bus_sel; | |
| wire main_ram_bus_cyc; | |
| wire main_ram_bus_stb; | |
| reg main_ram_bus_ack = 1'd0; | |
| wire main_ram_bus_we; | |
| wire [2:0] main_ram_bus_cti; | |
| wire [1:0] main_ram_bus_bte; | |
| reg main_ram_bus_err = 1'd0; | |
| wire [11:0] main_ram_adr; | |
| wire [31:0] main_ram_dat_r; | |
| reg [3:0] main_ram_we = 1'd0; | |
| wire [31:0] main_ram_dat_w; | |
| reg [13:0] interface_adr = 1'd0; | |
| reg interface_we = 1'd0; | |
| reg [7:0] interface_dat_w = 1'd0; | |
| wire [7:0] interface_dat_r; | |
| wire [29:0] bus_wishbone_adr; | |
| wire [31:0] bus_wishbone_dat_w; | |
| reg [31:0] bus_wishbone_dat_r = 1'd0; | |
| wire [3:0] bus_wishbone_sel; | |
| wire bus_wishbone_cyc; | |
| wire bus_wishbone_stb; | |
| reg bus_wishbone_ack = 1'd0; | |
| wire bus_wishbone_we; | |
| wire [2:0] bus_wishbone_cti; | |
| wire [1:0] bus_wishbone_bte; | |
| reg bus_wishbone_err = 1'd0; | |
| reg [1:0] counter = 1'd0; | |
| reg [31:0] uart_phy_storage_full = 24'd15461882; | |
| wire [31:0] uart_phy_storage; | |
| reg uart_phy_re = 1'd0; | |
| wire uart_phy_sink_stb; | |
| reg uart_phy_sink_ack = 1'd0; | |
| wire uart_phy_sink_eop; | |
| wire [7:0] uart_phy_sink_payload_data; | |
| reg uart_phy_uart_clk_txen = 1'd0; | |
| reg [31:0] uart_phy_phase_accumulator_tx = 1'd0; | |
| reg [7:0] uart_phy_tx_reg = 1'd0; | |
| reg [3:0] uart_phy_tx_bitcount = 1'd0; | |
| reg uart_phy_tx_busy = 1'd0; | |
| reg uart_phy_source_stb = 1'd0; | |
| wire uart_phy_source_ack; | |
| reg uart_phy_source_eop = 1'd0; | |
| reg [7:0] uart_phy_source_payload_data = 1'd0; | |
| reg uart_phy_uart_clk_rxen = 1'd0; | |
| reg [31:0] uart_phy_phase_accumulator_rx = 1'd0; | |
| wire uart_phy_rx; | |
| reg uart_phy_rx_r = 1'd0; | |
| reg [7:0] uart_phy_rx_reg = 1'd0; | |
| reg [3:0] uart_phy_rx_bitcount = 1'd0; | |
| reg uart_phy_rx_busy = 1'd0; | |
| wire uart_rxtx_re; | |
| wire [7:0] uart_rxtx_r; | |
| wire [7:0] uart_rxtx_w; | |
| wire uart_txfull_status; | |
| wire uart_rxempty_status; | |
| wire uart_irq; | |
| wire uart_tx_status; | |
| reg uart_tx_pending = 1'd0; | |
| wire uart_tx_trigger; | |
| reg uart_tx_clear = 1'd0; | |
| reg uart_tx_old_trigger = 1'd0; | |
| wire uart_rx_status; | |
| reg uart_rx_pending = 1'd0; | |
| wire uart_rx_trigger; | |
| reg uart_rx_clear = 1'd0; | |
| reg uart_rx_old_trigger = 1'd0; | |
| wire uart_status_re; | |
| wire [1:0] uart_status_r; | |
| reg [1:0] uart_status_w = 1'd0; | |
| wire uart_pending_re; | |
| wire [1:0] uart_pending_r; | |
| reg [1:0] uart_pending_w = 1'd0; | |
| reg [1:0] uart_storage_full = 1'd0; | |
| wire [1:0] uart_storage; | |
| reg uart_re = 1'd0; | |
| wire uart_tx_fifo_sink_stb; | |
| wire uart_tx_fifo_sink_ack; | |
| reg uart_tx_fifo_sink_eop = 1'd0; | |
| wire [7:0] uart_tx_fifo_sink_payload_data; | |
| wire uart_tx_fifo_source_stb; | |
| wire uart_tx_fifo_source_ack; | |
| wire uart_tx_fifo_source_eop; | |
| wire [7:0] uart_tx_fifo_source_payload_data; | |
| wire uart_tx_fifo_syncfifo_we; | |
| wire uart_tx_fifo_syncfifo_writable; | |
| wire uart_tx_fifo_syncfifo_re; | |
| wire uart_tx_fifo_syncfifo_readable; | |
| wire [8:0] uart_tx_fifo_syncfifo_din; | |
| wire [8:0] uart_tx_fifo_syncfifo_dout; | |
| reg [4:0] uart_tx_fifo_level = 1'd0; | |
| reg uart_tx_fifo_replace = 1'd0; | |
| reg [3:0] uart_tx_fifo_produce = 1'd0; | |
| reg [3:0] uart_tx_fifo_consume = 1'd0; | |
| reg [3:0] uart_tx_fifo_wrport_adr = 1'd0; | |
| wire [8:0] uart_tx_fifo_wrport_dat_r; | |
| wire uart_tx_fifo_wrport_we; | |
| wire [8:0] uart_tx_fifo_wrport_dat_w; | |
| wire uart_tx_fifo_do_read; | |
| wire [3:0] uart_tx_fifo_rdport_adr; | |
| wire [8:0] uart_tx_fifo_rdport_dat_r; | |
| wire [7:0] uart_tx_fifo_fifo_in_payload_data; | |
| wire uart_tx_fifo_fifo_in_eop; | |
| wire [7:0] uart_tx_fifo_fifo_out_payload_data; | |
| wire uart_tx_fifo_fifo_out_eop; | |
| wire uart_rx_fifo_sink_stb; | |
| wire uart_rx_fifo_sink_ack; | |
| wire uart_rx_fifo_sink_eop; | |
| wire [7:0] uart_rx_fifo_sink_payload_data; | |
| wire uart_rx_fifo_source_stb; | |
| wire uart_rx_fifo_source_ack; | |
| wire uart_rx_fifo_source_eop; | |
| wire [7:0] uart_rx_fifo_source_payload_data; | |
| wire uart_rx_fifo_syncfifo_we; | |
| wire uart_rx_fifo_syncfifo_writable; | |
| wire uart_rx_fifo_syncfifo_re; | |
| wire uart_rx_fifo_syncfifo_readable; | |
| wire [8:0] uart_rx_fifo_syncfifo_din; | |
| wire [8:0] uart_rx_fifo_syncfifo_dout; | |
| reg [4:0] uart_rx_fifo_level = 1'd0; | |
| reg uart_rx_fifo_replace = 1'd0; | |
| reg [3:0] uart_rx_fifo_produce = 1'd0; | |
| reg [3:0] uart_rx_fifo_consume = 1'd0; | |
| reg [3:0] uart_rx_fifo_wrport_adr = 1'd0; | |
| wire [8:0] uart_rx_fifo_wrport_dat_r; | |
| wire uart_rx_fifo_wrport_we; | |
| wire [8:0] uart_rx_fifo_wrport_dat_w; | |
| wire uart_rx_fifo_do_read; | |
| wire [3:0] uart_rx_fifo_rdport_adr; | |
| wire [8:0] uart_rx_fifo_rdport_dat_r; | |
| wire [7:0] uart_rx_fifo_fifo_in_payload_data; | |
| wire uart_rx_fifo_fifo_in_eop; | |
| wire [7:0] uart_rx_fifo_fifo_out_payload_data; | |
| wire uart_rx_fifo_fifo_out_eop; | |
| reg [31:0] timer0_load_storage_full = 1'd0; | |
| wire [31:0] timer0_load_storage; | |
| reg timer0_load_re = 1'd0; | |
| reg [31:0] timer0_reload_storage_full = 1'd0; | |
| wire [31:0] timer0_reload_storage; | |
| reg timer0_reload_re = 1'd0; | |
| reg timer0_en_storage_full = 1'd0; | |
| wire timer0_en_storage; | |
| reg timer0_en_re = 1'd0; | |
| wire timer0_update_value_re; | |
| wire timer0_update_value_r; | |
| reg timer0_update_value_w = 1'd0; | |
| reg [31:0] timer0_value_status = 1'd0; | |
| wire timer0_irq; | |
| wire timer0_zero_status; | |
| reg timer0_zero_pending = 1'd0; | |
| wire timer0_zero_trigger; | |
| reg timer0_zero_clear = 1'd0; | |
| reg timer0_zero_old_trigger = 1'd0; | |
| wire timer0_eventmanager_status_re; | |
| wire timer0_eventmanager_status_r; | |
| wire timer0_eventmanager_status_w; | |
| wire timer0_eventmanager_pending_re; | |
| wire timer0_eventmanager_pending_r; | |
| wire timer0_eventmanager_pending_w; | |
| reg timer0_eventmanager_storage_full = 1'd0; | |
| wire timer0_eventmanager_storage; | |
| reg timer0_eventmanager_re = 1'd0; | |
| reg [31:0] timer0_value = 1'd0; | |
| reg [7:0] leds_storage_full = 1'd0; | |
| wire [7:0] leds_storage; | |
| reg leds_re = 1'd0; | |
| wire sys_clk; | |
| reg sys_rst = 1'd0; | |
| wire [29:0] shared_adr; | |
| wire [31:0] shared_dat_w; | |
| wire [31:0] shared_dat_r; | |
| wire [3:0] shared_sel; | |
| wire shared_cyc; | |
| wire shared_stb; | |
| wire shared_ack; | |
| wire shared_we; | |
| wire [2:0] shared_cti; | |
| wire [1:0] shared_bte; | |
| wire shared_err; | |
| wire [1:0] request; | |
| reg grant = 1'd0; | |
| reg [3:0] slave_sel = 1'd0; | |
| reg [3:0] slave_sel_r = 1'd0; | |
| wire [13:0] interface0_adr; | |
| wire interface0_we; | |
| wire [7:0] interface0_dat_w; | |
| reg [7:0] interface0_dat_r = 1'd0; | |
| wire csrbank0_out0_re; | |
| wire [7:0] csrbank0_out0_r; | |
| wire [7:0] csrbank0_out0_w; | |
| wire csrbank0_sel; | |
| wire [13:0] interface1_adr; | |
| wire interface1_we; | |
| wire [7:0] interface1_dat_w; | |
| reg [7:0] interface1_dat_r = 1'd0; | |
| wire csrbank1_load3_re; | |
| wire [7:0] csrbank1_load3_r; | |
| wire [7:0] csrbank1_load3_w; | |
| wire csrbank1_load2_re; | |
| wire [7:0] csrbank1_load2_r; | |
| wire [7:0] csrbank1_load2_w; | |
| wire csrbank1_load1_re; | |
| wire [7:0] csrbank1_load1_r; | |
| wire [7:0] csrbank1_load1_w; | |
| wire csrbank1_load0_re; | |
| wire [7:0] csrbank1_load0_r; | |
| wire [7:0] csrbank1_load0_w; | |
| wire csrbank1_reload3_re; | |
| wire [7:0] csrbank1_reload3_r; | |
| wire [7:0] csrbank1_reload3_w; | |
| wire csrbank1_reload2_re; | |
| wire [7:0] csrbank1_reload2_r; | |
| wire [7:0] csrbank1_reload2_w; | |
| wire csrbank1_reload1_re; | |
| wire [7:0] csrbank1_reload1_r; | |
| wire [7:0] csrbank1_reload1_w; | |
| wire csrbank1_reload0_re; | |
| wire [7:0] csrbank1_reload0_r; | |
| wire [7:0] csrbank1_reload0_w; | |
| wire csrbank1_en0_re; | |
| wire csrbank1_en0_r; | |
| wire csrbank1_en0_w; | |
| wire csrbank1_value3_re; | |
| wire [7:0] csrbank1_value3_r; | |
| wire [7:0] csrbank1_value3_w; | |
| wire csrbank1_value2_re; | |
| wire [7:0] csrbank1_value2_r; | |
| wire [7:0] csrbank1_value2_w; | |
| wire csrbank1_value1_re; | |
| wire [7:0] csrbank1_value1_r; | |
| wire [7:0] csrbank1_value1_w; | |
| wire csrbank1_value0_re; | |
| wire [7:0] csrbank1_value0_r; | |
| wire [7:0] csrbank1_value0_w; | |
| wire csrbank1_ev_enable0_re; | |
| wire csrbank1_ev_enable0_r; | |
| wire csrbank1_ev_enable0_w; | |
| wire csrbank1_sel; | |
| wire [13:0] interface2_adr; | |
| wire interface2_we; | |
| wire [7:0] interface2_dat_w; | |
| reg [7:0] interface2_dat_r = 1'd0; | |
| wire csrbank2_txfull_re; | |
| wire csrbank2_txfull_r; | |
| wire csrbank2_txfull_w; | |
| wire csrbank2_rxempty_re; | |
| wire csrbank2_rxempty_r; | |
| wire csrbank2_rxempty_w; | |
| wire csrbank2_ev_enable0_re; | |
| wire [1:0] csrbank2_ev_enable0_r; | |
| wire [1:0] csrbank2_ev_enable0_w; | |
| wire csrbank2_sel; | |
| wire [13:0] interface3_adr; | |
| wire interface3_we; | |
| wire [7:0] interface3_dat_w; | |
| reg [7:0] interface3_dat_r = 1'd0; | |
| wire csrbank3_tuning_word3_re; | |
| wire [7:0] csrbank3_tuning_word3_r; | |
| wire [7:0] csrbank3_tuning_word3_w; | |
| wire csrbank3_tuning_word2_re; | |
| wire [7:0] csrbank3_tuning_word2_r; | |
| wire [7:0] csrbank3_tuning_word2_w; | |
| wire csrbank3_tuning_word1_re; | |
| wire [7:0] csrbank3_tuning_word1_r; | |
| wire [7:0] csrbank3_tuning_word1_w; | |
| wire csrbank3_tuning_word0_re; | |
| wire [7:0] csrbank3_tuning_word0_r; | |
| wire [7:0] csrbank3_tuning_word0_w; | |
| wire csrbank3_sel; | |
| reg [29:0] array_muxed0 = 1'd0; | |
| reg [31:0] array_muxed1 = 1'd0; | |
| reg [3:0] array_muxed2 = 1'd0; | |
| reg array_muxed3 = 1'd0; | |
| reg array_muxed4 = 1'd0; | |
| reg array_muxed5 = 1'd0; | |
| reg [2:0] array_muxed6 = 1'd0; | |
| reg [1:0] array_muxed7 = 1'd0; | |
| reg regs0 = 1'd0; | |
| reg regs1 = 1'd0; | |
| // synthesis translate_off | |
| reg dummy_s; | |
| initial dummy_s <= 1'd0; | |
| // synthesis translate_on | |
| assign sys_clk = clk32; | |
| // synthesis translate_off | |
| reg dummy_d; | |
| // synthesis translate_on | |
| always @(*) begin | |
| interrupt <= 1'd0; | |
| interrupt[0] <= uart_irq; | |
| interrupt[1] <= timer0_irq; | |
| // synthesis translate_off | |
| dummy_d <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign ibus_adr = i_adr_o[31:2]; | |
| assign dbus_adr = d_adr_o[31:2]; | |
| assign rom_adr = rom_bus_adr[12:0]; | |
| assign rom_bus_dat_r = rom_dat_r; | |
| // synthesis translate_off | |
| reg dummy_d_1; | |
| // synthesis translate_on | |
| always @(*) begin | |
| sram_we <= 1'd0; | |
| sram_we[0] <= (((sram_bus_cyc & sram_bus_stb) & sram_bus_we) & sram_bus_sel[0]); | |
| sram_we[1] <= (((sram_bus_cyc & sram_bus_stb) & sram_bus_we) & sram_bus_sel[1]); | |
| sram_we[2] <= (((sram_bus_cyc & sram_bus_stb) & sram_bus_we) & sram_bus_sel[2]); | |
| sram_we[3] <= (((sram_bus_cyc & sram_bus_stb) & sram_bus_we) & sram_bus_sel[3]); | |
| // synthesis translate_off | |
| dummy_d_1 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign sram_adr = sram_bus_adr[9:0]; | |
| assign sram_bus_dat_r = sram_dat_r; | |
| assign sram_dat_w = sram_bus_dat_w; | |
| // synthesis translate_off | |
| reg dummy_d_2; | |
| // synthesis translate_on | |
| always @(*) begin | |
| main_ram_we <= 1'd0; | |
| main_ram_we[0] <= (((main_ram_bus_cyc & main_ram_bus_stb) & main_ram_bus_we) & main_ram_bus_sel[0]); | |
| main_ram_we[1] <= (((main_ram_bus_cyc & main_ram_bus_stb) & main_ram_bus_we) & main_ram_bus_sel[1]); | |
| main_ram_we[2] <= (((main_ram_bus_cyc & main_ram_bus_stb) & main_ram_bus_we) & main_ram_bus_sel[2]); | |
| main_ram_we[3] <= (((main_ram_bus_cyc & main_ram_bus_stb) & main_ram_bus_we) & main_ram_bus_sel[3]); | |
| // synthesis translate_off | |
| dummy_d_2 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign main_ram_adr = main_ram_bus_adr[11:0]; | |
| assign main_ram_bus_dat_r = main_ram_dat_r; | |
| assign main_ram_dat_w = main_ram_bus_dat_w; | |
| assign uart_tx_fifo_sink_stb = uart_rxtx_re; | |
| assign uart_tx_fifo_sink_payload_data = uart_rxtx_r; | |
| assign uart_txfull_status = (~uart_tx_fifo_sink_ack); | |
| assign uart_phy_sink_stb = uart_tx_fifo_source_stb; | |
| assign uart_tx_fifo_source_ack = uart_phy_sink_ack; | |
| assign uart_phy_sink_eop = uart_tx_fifo_source_eop; | |
| assign uart_phy_sink_payload_data = uart_tx_fifo_source_payload_data; | |
| assign uart_tx_trigger = (~uart_tx_fifo_sink_ack); | |
| assign uart_rx_fifo_sink_stb = uart_phy_source_stb; | |
| assign uart_phy_source_ack = uart_rx_fifo_sink_ack; | |
| assign uart_rx_fifo_sink_eop = uart_phy_source_eop; | |
| assign uart_rx_fifo_sink_payload_data = uart_phy_source_payload_data; | |
| assign uart_rxempty_status = (~uart_rx_fifo_source_stb); | |
| assign uart_rxtx_w = uart_rx_fifo_source_payload_data; | |
| assign uart_rx_fifo_source_ack = uart_rx_clear; | |
| assign uart_rx_trigger = (~uart_rx_fifo_source_stb); | |
| // synthesis translate_off | |
| reg dummy_d_3; | |
| // synthesis translate_on | |
| always @(*) begin | |
| uart_tx_clear <= 1'd0; | |
| if ((uart_pending_re & uart_pending_r[0])) begin | |
| uart_tx_clear <= 1'd1; | |
| end | |
| // synthesis translate_off | |
| dummy_d_3 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_4; | |
| // synthesis translate_on | |
| always @(*) begin | |
| uart_status_w <= 1'd0; | |
| uart_status_w[0] <= uart_tx_status; | |
| uart_status_w[1] <= uart_rx_status; | |
| // synthesis translate_off | |
| dummy_d_4 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_5; | |
| // synthesis translate_on | |
| always @(*) begin | |
| uart_rx_clear <= 1'd0; | |
| if ((uart_pending_re & uart_pending_r[1])) begin | |
| uart_rx_clear <= 1'd1; | |
| end | |
| // synthesis translate_off | |
| dummy_d_5 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_6; | |
| // synthesis translate_on | |
| always @(*) begin | |
| uart_pending_w <= 1'd0; | |
| uart_pending_w[0] <= uart_tx_pending; | |
| uart_pending_w[1] <= uart_rx_pending; | |
| // synthesis translate_off | |
| dummy_d_6 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign uart_irq = ((uart_pending_w[0] & uart_storage[0]) | (uart_pending_w[1] & uart_storage[1])); | |
| assign uart_tx_status = uart_tx_trigger; | |
| assign uart_rx_status = uart_rx_trigger; | |
| assign uart_tx_fifo_syncfifo_din = {uart_tx_fifo_fifo_in_eop, uart_tx_fifo_fifo_in_payload_data}; | |
| assign {uart_tx_fifo_fifo_out_eop, uart_tx_fifo_fifo_out_payload_data} = uart_tx_fifo_syncfifo_dout; | |
| assign uart_tx_fifo_sink_ack = uart_tx_fifo_syncfifo_writable; | |
| assign uart_tx_fifo_syncfifo_we = uart_tx_fifo_sink_stb; | |
| assign uart_tx_fifo_fifo_in_eop = uart_tx_fifo_sink_eop; | |
| assign uart_tx_fifo_fifo_in_payload_data = uart_tx_fifo_sink_payload_data; | |
| assign uart_tx_fifo_source_stb = uart_tx_fifo_syncfifo_readable; | |
| assign uart_tx_fifo_source_eop = uart_tx_fifo_fifo_out_eop; | |
| assign uart_tx_fifo_source_payload_data = uart_tx_fifo_fifo_out_payload_data; | |
| assign uart_tx_fifo_syncfifo_re = uart_tx_fifo_source_ack; | |
| // synthesis translate_off | |
| reg dummy_d_7; | |
| // synthesis translate_on | |
| always @(*) begin | |
| uart_tx_fifo_wrport_adr <= 1'd0; | |
| if (uart_tx_fifo_replace) begin | |
| uart_tx_fifo_wrport_adr <= (uart_tx_fifo_produce - 1'd1); | |
| end else begin | |
| uart_tx_fifo_wrport_adr <= uart_tx_fifo_produce; | |
| end | |
| // synthesis translate_off | |
| dummy_d_7 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign uart_tx_fifo_wrport_dat_w = uart_tx_fifo_syncfifo_din; | |
| assign uart_tx_fifo_wrport_we = (uart_tx_fifo_syncfifo_we & (uart_tx_fifo_syncfifo_writable | uart_tx_fifo_replace)); | |
| assign uart_tx_fifo_do_read = (uart_tx_fifo_syncfifo_readable & uart_tx_fifo_syncfifo_re); | |
| assign uart_tx_fifo_rdport_adr = uart_tx_fifo_consume; | |
| assign uart_tx_fifo_syncfifo_dout = uart_tx_fifo_rdport_dat_r; | |
| assign uart_tx_fifo_syncfifo_writable = (uart_tx_fifo_level != 5'd16); | |
| assign uart_tx_fifo_syncfifo_readable = (uart_tx_fifo_level != 1'd0); | |
| assign uart_rx_fifo_syncfifo_din = {uart_rx_fifo_fifo_in_eop, uart_rx_fifo_fifo_in_payload_data}; | |
| assign {uart_rx_fifo_fifo_out_eop, uart_rx_fifo_fifo_out_payload_data} = uart_rx_fifo_syncfifo_dout; | |
| assign uart_rx_fifo_sink_ack = uart_rx_fifo_syncfifo_writable; | |
| assign uart_rx_fifo_syncfifo_we = uart_rx_fifo_sink_stb; | |
| assign uart_rx_fifo_fifo_in_eop = uart_rx_fifo_sink_eop; | |
| assign uart_rx_fifo_fifo_in_payload_data = uart_rx_fifo_sink_payload_data; | |
| assign uart_rx_fifo_source_stb = uart_rx_fifo_syncfifo_readable; | |
| assign uart_rx_fifo_source_eop = uart_rx_fifo_fifo_out_eop; | |
| assign uart_rx_fifo_source_payload_data = uart_rx_fifo_fifo_out_payload_data; | |
| assign uart_rx_fifo_syncfifo_re = uart_rx_fifo_source_ack; | |
| // synthesis translate_off | |
| reg dummy_d_8; | |
| // synthesis translate_on | |
| always @(*) begin | |
| uart_rx_fifo_wrport_adr <= 1'd0; | |
| if (uart_rx_fifo_replace) begin | |
| uart_rx_fifo_wrport_adr <= (uart_rx_fifo_produce - 1'd1); | |
| end else begin | |
| uart_rx_fifo_wrport_adr <= uart_rx_fifo_produce; | |
| end | |
| // synthesis translate_off | |
| dummy_d_8 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign uart_rx_fifo_wrport_dat_w = uart_rx_fifo_syncfifo_din; | |
| assign uart_rx_fifo_wrport_we = (uart_rx_fifo_syncfifo_we & (uart_rx_fifo_syncfifo_writable | uart_rx_fifo_replace)); | |
| assign uart_rx_fifo_do_read = (uart_rx_fifo_syncfifo_readable & uart_rx_fifo_syncfifo_re); | |
| assign uart_rx_fifo_rdport_adr = uart_rx_fifo_consume; | |
| assign uart_rx_fifo_syncfifo_dout = uart_rx_fifo_rdport_dat_r; | |
| assign uart_rx_fifo_syncfifo_writable = (uart_rx_fifo_level != 5'd16); | |
| assign uart_rx_fifo_syncfifo_readable = (uart_rx_fifo_level != 1'd0); | |
| assign timer0_zero_trigger = (timer0_value != 1'd0); | |
| assign timer0_eventmanager_status_w = timer0_zero_status; | |
| // synthesis translate_off | |
| reg dummy_d_9; | |
| // synthesis translate_on | |
| always @(*) begin | |
| timer0_zero_clear <= 1'd0; | |
| if ((timer0_eventmanager_pending_re & timer0_eventmanager_pending_r)) begin | |
| timer0_zero_clear <= 1'd1; | |
| end | |
| // synthesis translate_off | |
| dummy_d_9 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign timer0_eventmanager_pending_w = timer0_zero_pending; | |
| assign timer0_irq = (timer0_eventmanager_pending_w & timer0_eventmanager_storage); | |
| assign timer0_zero_status = timer0_zero_trigger; | |
| assign {user_led_7, user_led_6, user_led_5, user_led_4, user_led_3, user_led_2, user_led_1, user_led} = leds_storage; | |
| assign shared_adr = array_muxed0; | |
| assign shared_dat_w = array_muxed1; | |
| assign shared_sel = array_muxed2; | |
| assign shared_cyc = array_muxed3; | |
| assign shared_stb = array_muxed4; | |
| assign shared_we = array_muxed5; | |
| assign shared_cti = array_muxed6; | |
| assign shared_bte = array_muxed7; | |
| assign ibus_dat_r = shared_dat_r; | |
| assign dbus_dat_r = shared_dat_r; | |
| assign ibus_ack = (shared_ack & (grant == 1'd0)); | |
| assign dbus_ack = (shared_ack & (grant == 1'd1)); | |
| assign ibus_err = (shared_err & (grant == 1'd0)); | |
| assign dbus_err = (shared_err & (grant == 1'd1)); | |
| assign request = {dbus_cyc, ibus_cyc}; | |
| // synthesis translate_off | |
| reg dummy_d_10; | |
| // synthesis translate_on | |
| always @(*) begin | |
| slave_sel <= 1'd0; | |
| slave_sel[0] <= (shared_adr[28:26] == 1'd0); | |
| slave_sel[1] <= (shared_adr[28:26] == 1'd1); | |
| slave_sel[2] <= (shared_adr[28:26] == 3'd4); | |
| slave_sel[3] <= (shared_adr[28:26] == 3'd6); | |
| // synthesis translate_off | |
| dummy_d_10 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign rom_bus_adr = shared_adr; | |
| assign rom_bus_dat_w = shared_dat_w; | |
| assign rom_bus_sel = shared_sel; | |
| assign rom_bus_stb = shared_stb; | |
| assign rom_bus_we = shared_we; | |
| assign rom_bus_cti = shared_cti; | |
| assign rom_bus_bte = shared_bte; | |
| assign sram_bus_adr = shared_adr; | |
| assign sram_bus_dat_w = shared_dat_w; | |
| assign sram_bus_sel = shared_sel; | |
| assign sram_bus_stb = shared_stb; | |
| assign sram_bus_we = shared_we; | |
| assign sram_bus_cti = shared_cti; | |
| assign sram_bus_bte = shared_bte; | |
| assign main_ram_bus_adr = shared_adr; | |
| assign main_ram_bus_dat_w = shared_dat_w; | |
| assign main_ram_bus_sel = shared_sel; | |
| assign main_ram_bus_stb = shared_stb; | |
| assign main_ram_bus_we = shared_we; | |
| assign main_ram_bus_cti = shared_cti; | |
| assign main_ram_bus_bte = shared_bte; | |
| assign bus_wishbone_adr = shared_adr; | |
| assign bus_wishbone_dat_w = shared_dat_w; | |
| assign bus_wishbone_sel = shared_sel; | |
| assign bus_wishbone_stb = shared_stb; | |
| assign bus_wishbone_we = shared_we; | |
| assign bus_wishbone_cti = shared_cti; | |
| assign bus_wishbone_bte = shared_bte; | |
| assign rom_bus_cyc = (shared_cyc & slave_sel[0]); | |
| assign sram_bus_cyc = (shared_cyc & slave_sel[1]); | |
| assign main_ram_bus_cyc = (shared_cyc & slave_sel[2]); | |
| assign bus_wishbone_cyc = (shared_cyc & slave_sel[3]); | |
| assign shared_ack = (((rom_bus_ack | sram_bus_ack) | main_ram_bus_ack) | bus_wishbone_ack); | |
| assign shared_err = (((rom_bus_err | sram_bus_err) | main_ram_bus_err) | bus_wishbone_err); | |
| assign shared_dat_r = (((({32{slave_sel_r[0]}} & rom_bus_dat_r) | ({32{slave_sel_r[1]}} & sram_bus_dat_r)) | ({32{slave_sel_r[2]}} & main_ram_bus_dat_r)) | ({32{slave_sel_r[3]}} & bus_wishbone_dat_r)); | |
| assign csrbank0_sel = (interface0_adr[13:9] == 3'd6); | |
| assign csrbank0_out0_r = interface0_dat_w[7:0]; | |
| assign csrbank0_out0_re = ((csrbank0_sel & interface0_we) & (interface0_adr[0] == 1'd0)); | |
| assign leds_storage = leds_storage_full[7:0]; | |
| assign csrbank0_out0_w = leds_storage_full[7:0]; | |
| assign csrbank1_sel = (interface1_adr[13:9] == 3'd4); | |
| assign csrbank1_load3_r = interface1_dat_w[7:0]; | |
| assign csrbank1_load3_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 1'd0)); | |
| assign csrbank1_load2_r = interface1_dat_w[7:0]; | |
| assign csrbank1_load2_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 1'd1)); | |
| assign csrbank1_load1_r = interface1_dat_w[7:0]; | |
| assign csrbank1_load1_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 2'd2)); | |
| assign csrbank1_load0_r = interface1_dat_w[7:0]; | |
| assign csrbank1_load0_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 2'd3)); | |
| assign csrbank1_reload3_r = interface1_dat_w[7:0]; | |
| assign csrbank1_reload3_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 3'd4)); | |
| assign csrbank1_reload2_r = interface1_dat_w[7:0]; | |
| assign csrbank1_reload2_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 3'd5)); | |
| assign csrbank1_reload1_r = interface1_dat_w[7:0]; | |
| assign csrbank1_reload1_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 3'd6)); | |
| assign csrbank1_reload0_r = interface1_dat_w[7:0]; | |
| assign csrbank1_reload0_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 3'd7)); | |
| assign csrbank1_en0_r = interface1_dat_w[0]; | |
| assign csrbank1_en0_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 4'd8)); | |
| assign timer0_update_value_r = interface1_dat_w[0]; | |
| assign timer0_update_value_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 4'd9)); | |
| assign csrbank1_value3_r = interface1_dat_w[7:0]; | |
| assign csrbank1_value3_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 4'd10)); | |
| assign csrbank1_value2_r = interface1_dat_w[7:0]; | |
| assign csrbank1_value2_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 4'd11)); | |
| assign csrbank1_value1_r = interface1_dat_w[7:0]; | |
| assign csrbank1_value1_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 4'd12)); | |
| assign csrbank1_value0_r = interface1_dat_w[7:0]; | |
| assign csrbank1_value0_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 4'd13)); | |
| assign timer0_eventmanager_status_r = interface1_dat_w[0]; | |
| assign timer0_eventmanager_status_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 4'd14)); | |
| assign timer0_eventmanager_pending_r = interface1_dat_w[0]; | |
| assign timer0_eventmanager_pending_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 4'd15)); | |
| assign csrbank1_ev_enable0_r = interface1_dat_w[0]; | |
| assign csrbank1_ev_enable0_re = ((csrbank1_sel & interface1_we) & (interface1_adr[4:0] == 5'd16)); | |
| assign timer0_load_storage = timer0_load_storage_full[31:0]; | |
| assign csrbank1_load3_w = timer0_load_storage_full[31:24]; | |
| assign csrbank1_load2_w = timer0_load_storage_full[23:16]; | |
| assign csrbank1_load1_w = timer0_load_storage_full[15:8]; | |
| assign csrbank1_load0_w = timer0_load_storage_full[7:0]; | |
| assign timer0_reload_storage = timer0_reload_storage_full[31:0]; | |
| assign csrbank1_reload3_w = timer0_reload_storage_full[31:24]; | |
| assign csrbank1_reload2_w = timer0_reload_storage_full[23:16]; | |
| assign csrbank1_reload1_w = timer0_reload_storage_full[15:8]; | |
| assign csrbank1_reload0_w = timer0_reload_storage_full[7:0]; | |
| assign timer0_en_storage = timer0_en_storage_full; | |
| assign csrbank1_en0_w = timer0_en_storage_full; | |
| assign csrbank1_value3_w = timer0_value_status[31:24]; | |
| assign csrbank1_value2_w = timer0_value_status[23:16]; | |
| assign csrbank1_value1_w = timer0_value_status[15:8]; | |
| assign csrbank1_value0_w = timer0_value_status[7:0]; | |
| assign timer0_eventmanager_storage = timer0_eventmanager_storage_full; | |
| assign csrbank1_ev_enable0_w = timer0_eventmanager_storage_full; | |
| assign csrbank2_sel = (interface2_adr[13:9] == 2'd2); | |
| assign uart_rxtx_r = interface2_dat_w[7:0]; | |
| assign uart_rxtx_re = ((csrbank2_sel & interface2_we) & (interface2_adr[2:0] == 1'd0)); | |
| assign csrbank2_txfull_r = interface2_dat_w[0]; | |
| assign csrbank2_txfull_re = ((csrbank2_sel & interface2_we) & (interface2_adr[2:0] == 1'd1)); | |
| assign csrbank2_rxempty_r = interface2_dat_w[0]; | |
| assign csrbank2_rxempty_re = ((csrbank2_sel & interface2_we) & (interface2_adr[2:0] == 2'd2)); | |
| assign uart_status_r = interface2_dat_w[1:0]; | |
| assign uart_status_re = ((csrbank2_sel & interface2_we) & (interface2_adr[2:0] == 2'd3)); | |
| assign uart_pending_r = interface2_dat_w[1:0]; | |
| assign uart_pending_re = ((csrbank2_sel & interface2_we) & (interface2_adr[2:0] == 3'd4)); | |
| assign csrbank2_ev_enable0_r = interface2_dat_w[1:0]; | |
| assign csrbank2_ev_enable0_re = ((csrbank2_sel & interface2_we) & (interface2_adr[2:0] == 3'd5)); | |
| assign csrbank2_txfull_w = uart_txfull_status; | |
| assign csrbank2_rxempty_w = uart_rxempty_status; | |
| assign uart_storage = uart_storage_full[1:0]; | |
| assign csrbank2_ev_enable0_w = uart_storage_full[1:0]; | |
| assign csrbank3_sel = (interface3_adr[13:9] == 1'd1); | |
| assign csrbank3_tuning_word3_r = interface3_dat_w[7:0]; | |
| assign csrbank3_tuning_word3_re = ((csrbank3_sel & interface3_we) & (interface3_adr[1:0] == 1'd0)); | |
| assign csrbank3_tuning_word2_r = interface3_dat_w[7:0]; | |
| assign csrbank3_tuning_word2_re = ((csrbank3_sel & interface3_we) & (interface3_adr[1:0] == 1'd1)); | |
| assign csrbank3_tuning_word1_r = interface3_dat_w[7:0]; | |
| assign csrbank3_tuning_word1_re = ((csrbank3_sel & interface3_we) & (interface3_adr[1:0] == 2'd2)); | |
| assign csrbank3_tuning_word0_r = interface3_dat_w[7:0]; | |
| assign csrbank3_tuning_word0_re = ((csrbank3_sel & interface3_we) & (interface3_adr[1:0] == 2'd3)); | |
| assign uart_phy_storage = uart_phy_storage_full[31:0]; | |
| assign csrbank3_tuning_word3_w = uart_phy_storage_full[31:24]; | |
| assign csrbank3_tuning_word2_w = uart_phy_storage_full[23:16]; | |
| assign csrbank3_tuning_word1_w = uart_phy_storage_full[15:8]; | |
| assign csrbank3_tuning_word0_w = uart_phy_storage_full[7:0]; | |
| assign interface0_adr = interface_adr; | |
| assign interface1_adr = interface_adr; | |
| assign interface2_adr = interface_adr; | |
| assign interface3_adr = interface_adr; | |
| assign interface0_we = interface_we; | |
| assign interface1_we = interface_we; | |
| assign interface2_we = interface_we; | |
| assign interface3_we = interface_we; | |
| assign interface0_dat_w = interface_dat_w; | |
| assign interface1_dat_w = interface_dat_w; | |
| assign interface2_dat_w = interface_dat_w; | |
| assign interface3_dat_w = interface_dat_w; | |
| assign interface_dat_r = (((interface0_dat_r | interface1_dat_r) | interface2_dat_r) | interface3_dat_r); | |
| // synthesis translate_off | |
| reg dummy_d_11; | |
| // synthesis translate_on | |
| always @(*) begin | |
| array_muxed0 <= 1'd0; | |
| case (grant) | |
| 1'd0: begin | |
| array_muxed0 <= ibus_adr; | |
| end | |
| default: begin | |
| array_muxed0 <= dbus_adr; | |
| end | |
| endcase | |
| // synthesis translate_off | |
| dummy_d_11 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_12; | |
| // synthesis translate_on | |
| always @(*) begin | |
| array_muxed1 <= 1'd0; | |
| case (grant) | |
| 1'd0: begin | |
| array_muxed1 <= ibus_dat_w; | |
| end | |
| default: begin | |
| array_muxed1 <= dbus_dat_w; | |
| end | |
| endcase | |
| // synthesis translate_off | |
| dummy_d_12 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_13; | |
| // synthesis translate_on | |
| always @(*) begin | |
| array_muxed2 <= 1'd0; | |
| case (grant) | |
| 1'd0: begin | |
| array_muxed2 <= ibus_sel; | |
| end | |
| default: begin | |
| array_muxed2 <= dbus_sel; | |
| end | |
| endcase | |
| // synthesis translate_off | |
| dummy_d_13 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_14; | |
| // synthesis translate_on | |
| always @(*) begin | |
| array_muxed3 <= 1'd0; | |
| case (grant) | |
| 1'd0: begin | |
| array_muxed3 <= ibus_cyc; | |
| end | |
| default: begin | |
| array_muxed3 <= dbus_cyc; | |
| end | |
| endcase | |
| // synthesis translate_off | |
| dummy_d_14 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_15; | |
| // synthesis translate_on | |
| always @(*) begin | |
| array_muxed4 <= 1'd0; | |
| case (grant) | |
| 1'd0: begin | |
| array_muxed4 <= ibus_stb; | |
| end | |
| default: begin | |
| array_muxed4 <= dbus_stb; | |
| end | |
| endcase | |
| // synthesis translate_off | |
| dummy_d_15 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_16; | |
| // synthesis translate_on | |
| always @(*) begin | |
| array_muxed5 <= 1'd0; | |
| case (grant) | |
| 1'd0: begin | |
| array_muxed5 <= ibus_we; | |
| end | |
| default: begin | |
| array_muxed5 <= dbus_we; | |
| end | |
| endcase | |
| // synthesis translate_off | |
| dummy_d_16 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_17; | |
| // synthesis translate_on | |
| always @(*) begin | |
| array_muxed6 <= 1'd0; | |
| case (grant) | |
| 1'd0: begin | |
| array_muxed6 <= ibus_cti; | |
| end | |
| default: begin | |
| array_muxed6 <= dbus_cti; | |
| end | |
| endcase | |
| // synthesis translate_off | |
| dummy_d_17 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| // synthesis translate_off | |
| reg dummy_d_18; | |
| // synthesis translate_on | |
| always @(*) begin | |
| array_muxed7 <= 1'd0; | |
| case (grant) | |
| 1'd0: begin | |
| array_muxed7 <= ibus_bte; | |
| end | |
| default: begin | |
| array_muxed7 <= dbus_bte; | |
| end | |
| endcase | |
| // synthesis translate_off | |
| dummy_d_18 <= dummy_s; | |
| // synthesis translate_on | |
| end | |
| assign uart_phy_rx = regs1; | |
| always @(posedge sys_clk) begin | |
| if (sys_rst) begin | |
| rom_bus_ack <= 1'd0; | |
| sram_bus_ack <= 1'd0; | |
| main_ram_bus_ack <= 1'd0; | |
| interface_adr <= 1'd0; | |
| interface_we <= 1'd0; | |
| interface_dat_w <= 1'd0; | |
| bus_wishbone_dat_r <= 1'd0; | |
| bus_wishbone_ack <= 1'd0; | |
| counter <= 1'd0; | |
| serial_tx <= 1'd1; | |
| uart_phy_storage_full <= 24'd15461882; | |
| uart_phy_re <= 1'd0; | |
| uart_phy_sink_ack <= 1'd0; | |
| uart_phy_uart_clk_txen <= 1'd0; | |
| uart_phy_phase_accumulator_tx <= 1'd0; | |
| uart_phy_tx_reg <= 1'd0; | |
| uart_phy_tx_bitcount <= 1'd0; | |
| uart_phy_tx_busy <= 1'd0; | |
| uart_phy_source_stb <= 1'd0; | |
| uart_phy_source_payload_data <= 1'd0; | |
| uart_phy_uart_clk_rxen <= 1'd0; | |
| uart_phy_phase_accumulator_rx <= 1'd0; | |
| uart_phy_rx_r <= 1'd0; | |
| uart_phy_rx_reg <= 1'd0; | |
| uart_phy_rx_bitcount <= 1'd0; | |
| uart_phy_rx_busy <= 1'd0; | |
| uart_tx_pending <= 1'd0; | |
| uart_tx_old_trigger <= 1'd0; | |
| uart_rx_pending <= 1'd0; | |
| uart_rx_old_trigger <= 1'd0; | |
| uart_storage_full <= 1'd0; | |
| uart_re <= 1'd0; | |
| uart_tx_fifo_level <= 1'd0; | |
| uart_tx_fifo_produce <= 1'd0; | |
| uart_tx_fifo_consume <= 1'd0; | |
| uart_rx_fifo_level <= 1'd0; | |
| uart_rx_fifo_produce <= 1'd0; | |
| uart_rx_fifo_consume <= 1'd0; | |
| timer0_load_storage_full <= 1'd0; | |
| timer0_load_re <= 1'd0; | |
| timer0_reload_storage_full <= 1'd0; | |
| timer0_reload_re <= 1'd0; | |
| timer0_en_storage_full <= 1'd0; | |
| timer0_en_re <= 1'd0; | |
| timer0_value_status <= 1'd0; | |
| timer0_zero_pending <= 1'd0; | |
| timer0_zero_old_trigger <= 1'd0; | |
| timer0_eventmanager_storage_full <= 1'd0; | |
| timer0_eventmanager_re <= 1'd0; | |
| timer0_value <= 1'd0; | |
| leds_storage_full <= 1'd0; | |
| leds_re <= 1'd0; | |
| grant <= 1'd0; | |
| slave_sel_r <= 1'd0; | |
| interface0_dat_r <= 1'd0; | |
| interface1_dat_r <= 1'd0; | |
| interface2_dat_r <= 1'd0; | |
| interface3_dat_r <= 1'd0; | |
| end else begin | |
| rom_bus_ack <= 1'd0; | |
| if (((rom_bus_cyc & rom_bus_stb) & (~rom_bus_ack))) begin | |
| rom_bus_ack <= 1'd1; | |
| end | |
| sram_bus_ack <= 1'd0; | |
| if (((sram_bus_cyc & sram_bus_stb) & (~sram_bus_ack))) begin | |
| sram_bus_ack <= 1'd1; | |
| end | |
| main_ram_bus_ack <= 1'd0; | |
| if (((main_ram_bus_cyc & main_ram_bus_stb) & (~main_ram_bus_ack))) begin | |
| main_ram_bus_ack <= 1'd1; | |
| end | |
| interface_we <= 1'd0; | |
| interface_dat_w <= bus_wishbone_dat_w; | |
| interface_adr <= bus_wishbone_adr; | |
| bus_wishbone_dat_r <= interface_dat_r; | |
| if ((counter == 1'd1)) begin | |
| interface_we <= bus_wishbone_we; | |
| end | |
| if ((counter == 2'd2)) begin | |
| bus_wishbone_ack <= 1'd1; | |
| end | |
| if ((counter == 2'd3)) begin | |
| bus_wishbone_ack <= 1'd0; | |
| end | |
| if ((counter != 1'd0)) begin | |
| counter <= (counter + 1'd1); | |
| end else begin | |
| if ((bus_wishbone_cyc & bus_wishbone_stb)) begin | |
| counter <= 1'd1; | |
| end | |
| end | |
| uart_phy_sink_ack <= 1'd0; | |
| if (((uart_phy_sink_stb & (~uart_phy_tx_busy)) & (~uart_phy_sink_ack))) begin | |
| uart_phy_tx_reg <= uart_phy_sink_payload_data; | |
| uart_phy_tx_bitcount <= 1'd0; | |
| uart_phy_tx_busy <= 1'd1; | |
| serial_tx <= 1'd0; | |
| end else begin | |
| if ((uart_phy_uart_clk_txen & uart_phy_tx_busy)) begin | |
| uart_phy_tx_bitcount <= (uart_phy_tx_bitcount + 1'd1); | |
| if ((uart_phy_tx_bitcount == 4'd8)) begin | |
| serial_tx <= 1'd1; | |
| end else begin | |
| if ((uart_phy_tx_bitcount == 4'd9)) begin | |
| serial_tx <= 1'd1; | |
| uart_phy_tx_busy <= 1'd0; | |
| uart_phy_sink_ack <= 1'd1; | |
| end else begin | |
| serial_tx <= uart_phy_tx_reg[0]; | |
| uart_phy_tx_reg <= {1'd0, uart_phy_tx_reg[7:1]}; | |
| end | |
| end | |
| end | |
| end | |
| if (uart_phy_tx_busy) begin | |
| {uart_phy_uart_clk_txen, uart_phy_phase_accumulator_tx} <= (uart_phy_phase_accumulator_tx + uart_phy_storage); | |
| end else begin | |
| {uart_phy_uart_clk_txen, uart_phy_phase_accumulator_tx} <= 1'd0; | |
| end | |
| uart_phy_source_stb <= 1'd0; | |
| uart_phy_rx_r <= uart_phy_rx; | |
| if ((~uart_phy_rx_busy)) begin | |
| if (((~uart_phy_rx) & uart_phy_rx_r)) begin | |
| uart_phy_rx_busy <= 1'd1; | |
| uart_phy_rx_bitcount <= 1'd0; | |
| end | |
| end else begin | |
| if (uart_phy_uart_clk_rxen) begin | |
| uart_phy_rx_bitcount <= (uart_phy_rx_bitcount + 1'd1); | |
| if ((uart_phy_rx_bitcount == 1'd0)) begin | |
| if (uart_phy_rx) begin | |
| uart_phy_rx_busy <= 1'd0; | |
| end | |
| end else begin | |
| if ((uart_phy_rx_bitcount == 4'd9)) begin | |
| uart_phy_rx_busy <= 1'd0; | |
| if (uart_phy_rx) begin | |
| uart_phy_source_payload_data <= uart_phy_rx_reg; | |
| uart_phy_source_stb <= 1'd1; | |
| end | |
| end else begin | |
| uart_phy_rx_reg <= {uart_phy_rx, uart_phy_rx_reg[7:1]}; | |
| end | |
| end | |
| end | |
| end | |
| if (uart_phy_rx_busy) begin | |
| {uart_phy_uart_clk_rxen, uart_phy_phase_accumulator_rx} <= (uart_phy_phase_accumulator_rx + uart_phy_storage); | |
| end else begin | |
| {uart_phy_uart_clk_rxen, uart_phy_phase_accumulator_rx} <= 32'd2147483648; | |
| end | |
| if (uart_tx_clear) begin | |
| uart_tx_pending <= 1'd0; | |
| end | |
| uart_tx_old_trigger <= uart_tx_trigger; | |
| if (((~uart_tx_trigger) & uart_tx_old_trigger)) begin | |
| uart_tx_pending <= 1'd1; | |
| end | |
| if (uart_rx_clear) begin | |
| uart_rx_pending <= 1'd0; | |
| end | |
| uart_rx_old_trigger <= uart_rx_trigger; | |
| if (((~uart_rx_trigger) & uart_rx_old_trigger)) begin | |
| uart_rx_pending <= 1'd1; | |
| end | |
| if (((uart_tx_fifo_syncfifo_we & uart_tx_fifo_syncfifo_writable) & (~uart_tx_fifo_replace))) begin | |
| uart_tx_fifo_produce <= (uart_tx_fifo_produce + 1'd1); | |
| end | |
| if (uart_tx_fifo_do_read) begin | |
| uart_tx_fifo_consume <= (uart_tx_fifo_consume + 1'd1); | |
| end | |
| if (((uart_tx_fifo_syncfifo_we & uart_tx_fifo_syncfifo_writable) & (~uart_tx_fifo_replace))) begin | |
| if ((~uart_tx_fifo_do_read)) begin | |
| uart_tx_fifo_level <= (uart_tx_fifo_level + 1'd1); | |
| end | |
| end else begin | |
| if (uart_tx_fifo_do_read) begin | |
| uart_tx_fifo_level <= (uart_tx_fifo_level - 1'd1); | |
| end | |
| end | |
| if (((uart_rx_fifo_syncfifo_we & uart_rx_fifo_syncfifo_writable) & (~uart_rx_fifo_replace))) begin | |
| uart_rx_fifo_produce <= (uart_rx_fifo_produce + 1'd1); | |
| end | |
| if (uart_rx_fifo_do_read) begin | |
| uart_rx_fifo_consume <= (uart_rx_fifo_consume + 1'd1); | |
| end | |
| if (((uart_rx_fifo_syncfifo_we & uart_rx_fifo_syncfifo_writable) & (~uart_rx_fifo_replace))) begin | |
| if ((~uart_rx_fifo_do_read)) begin | |
| uart_rx_fifo_level <= (uart_rx_fifo_level + 1'd1); | |
| end | |
| end else begin | |
| if (uart_rx_fifo_do_read) begin | |
| uart_rx_fifo_level <= (uart_rx_fifo_level - 1'd1); | |
| end | |
| end | |
| if (timer0_en_storage) begin | |
| if ((timer0_value == 1'd0)) begin | |
| timer0_value <= timer0_reload_storage; | |
| end else begin | |
| timer0_value <= (timer0_value - 1'd1); | |
| end | |
| end else begin | |
| timer0_value <= timer0_load_storage; | |
| end | |
| if (timer0_update_value_re) begin | |
| timer0_value_status <= timer0_value; | |
| end | |
| if (timer0_zero_clear) begin | |
| timer0_zero_pending <= 1'd0; | |
| end | |
| timer0_zero_old_trigger <= timer0_zero_trigger; | |
| if (((~timer0_zero_trigger) & timer0_zero_old_trigger)) begin | |
| timer0_zero_pending <= 1'd1; | |
| end | |
| case (grant) | |
| 1'd0: begin | |
| if ((~request[0])) begin | |
| if (request[1]) begin | |
| grant <= 1'd1; | |
| end | |
| end | |
| end | |
| 1'd1: begin | |
| if ((~request[1])) begin | |
| if (request[0]) begin | |
| grant <= 1'd0; | |
| end | |
| end | |
| end | |
| endcase | |
| slave_sel_r <= slave_sel; | |
| interface0_dat_r <= 1'd0; | |
| if (csrbank0_sel) begin | |
| case (interface0_adr[0]) | |
| 1'd0: begin | |
| interface0_dat_r <= csrbank0_out0_w; | |
| end | |
| endcase | |
| end | |
| if (csrbank0_out0_re) begin | |
| leds_storage_full[7:0] <= csrbank0_out0_r; | |
| end | |
| leds_re <= csrbank0_out0_re; | |
| interface1_dat_r <= 1'd0; | |
| if (csrbank1_sel) begin | |
| case (interface1_adr[4:0]) | |
| 1'd0: begin | |
| interface1_dat_r <= csrbank1_load3_w; | |
| end | |
| 1'd1: begin | |
| interface1_dat_r <= csrbank1_load2_w; | |
| end | |
| 2'd2: begin | |
| interface1_dat_r <= csrbank1_load1_w; | |
| end | |
| 2'd3: begin | |
| interface1_dat_r <= csrbank1_load0_w; | |
| end | |
| 3'd4: begin | |
| interface1_dat_r <= csrbank1_reload3_w; | |
| end | |
| 3'd5: begin | |
| interface1_dat_r <= csrbank1_reload2_w; | |
| end | |
| 3'd6: begin | |
| interface1_dat_r <= csrbank1_reload1_w; | |
| end | |
| 3'd7: begin | |
| interface1_dat_r <= csrbank1_reload0_w; | |
| end | |
| 4'd8: begin | |
| interface1_dat_r <= csrbank1_en0_w; | |
| end | |
| 4'd9: begin | |
| interface1_dat_r <= timer0_update_value_w; | |
| end | |
| 4'd10: begin | |
| interface1_dat_r <= csrbank1_value3_w; | |
| end | |
| 4'd11: begin | |
| interface1_dat_r <= csrbank1_value2_w; | |
| end | |
| 4'd12: begin | |
| interface1_dat_r <= csrbank1_value1_w; | |
| end | |
| 4'd13: begin | |
| interface1_dat_r <= csrbank1_value0_w; | |
| end | |
| 4'd14: begin | |
| interface1_dat_r <= timer0_eventmanager_status_w; | |
| end | |
| 4'd15: begin | |
| interface1_dat_r <= timer0_eventmanager_pending_w; | |
| end | |
| 5'd16: begin | |
| interface1_dat_r <= csrbank1_ev_enable0_w; | |
| end | |
| endcase | |
| end | |
| if (csrbank1_load3_re) begin | |
| timer0_load_storage_full[31:24] <= csrbank1_load3_r; | |
| end | |
| if (csrbank1_load2_re) begin | |
| timer0_load_storage_full[23:16] <= csrbank1_load2_r; | |
| end | |
| if (csrbank1_load1_re) begin | |
| timer0_load_storage_full[15:8] <= csrbank1_load1_r; | |
| end | |
| if (csrbank1_load0_re) begin | |
| timer0_load_storage_full[7:0] <= csrbank1_load0_r; | |
| end | |
| timer0_load_re <= csrbank1_load0_re; | |
| if (csrbank1_reload3_re) begin | |
| timer0_reload_storage_full[31:24] <= csrbank1_reload3_r; | |
| end | |
| if (csrbank1_reload2_re) begin | |
| timer0_reload_storage_full[23:16] <= csrbank1_reload2_r; | |
| end | |
| if (csrbank1_reload1_re) begin | |
| timer0_reload_storage_full[15:8] <= csrbank1_reload1_r; | |
| end | |
| if (csrbank1_reload0_re) begin | |
| timer0_reload_storage_full[7:0] <= csrbank1_reload0_r; | |
| end | |
| timer0_reload_re <= csrbank1_reload0_re; | |
| if (csrbank1_en0_re) begin | |
| timer0_en_storage_full <= csrbank1_en0_r; | |
| end | |
| timer0_en_re <= csrbank1_en0_re; | |
| if (csrbank1_ev_enable0_re) begin | |
| timer0_eventmanager_storage_full <= csrbank1_ev_enable0_r; | |
| end | |
| timer0_eventmanager_re <= csrbank1_ev_enable0_re; | |
| interface2_dat_r <= 1'd0; | |
| if (csrbank2_sel) begin | |
| case (interface2_adr[2:0]) | |
| 1'd0: begin | |
| interface2_dat_r <= uart_rxtx_w; | |
| end | |
| 1'd1: begin | |
| interface2_dat_r <= csrbank2_txfull_w; | |
| end | |
| 2'd2: begin | |
| interface2_dat_r <= csrbank2_rxempty_w; | |
| end | |
| 2'd3: begin | |
| interface2_dat_r <= uart_status_w; | |
| end | |
| 3'd4: begin | |
| interface2_dat_r <= uart_pending_w; | |
| end | |
| 3'd5: begin | |
| interface2_dat_r <= csrbank2_ev_enable0_w; | |
| end | |
| endcase | |
| end | |
| if (csrbank2_ev_enable0_re) begin | |
| uart_storage_full[1:0] <= csrbank2_ev_enable0_r; | |
| end | |
| uart_re <= csrbank2_ev_enable0_re; | |
| interface3_dat_r <= 1'd0; | |
| if (csrbank3_sel) begin | |
| case (interface3_adr[1:0]) | |
| 1'd0: begin | |
| interface3_dat_r <= csrbank3_tuning_word3_w; | |
| end | |
| 1'd1: begin | |
| interface3_dat_r <= csrbank3_tuning_word2_w; | |
| end | |
| 2'd2: begin | |
| interface3_dat_r <= csrbank3_tuning_word1_w; | |
| end | |
| 2'd3: begin | |
| interface3_dat_r <= csrbank3_tuning_word0_w; | |
| end | |
| endcase | |
| end | |
| if (csrbank3_tuning_word3_re) begin | |
| uart_phy_storage_full[31:24] <= csrbank3_tuning_word3_r; | |
| end | |
| if (csrbank3_tuning_word2_re) begin | |
| uart_phy_storage_full[23:16] <= csrbank3_tuning_word2_r; | |
| end | |
| if (csrbank3_tuning_word1_re) begin | |
| uart_phy_storage_full[15:8] <= csrbank3_tuning_word1_r; | |
| end | |
| if (csrbank3_tuning_word0_re) begin | |
| uart_phy_storage_full[7:0] <= csrbank3_tuning_word0_r; | |
| end | |
| uart_phy_re <= csrbank3_tuning_word0_re; | |
| end | |
| regs0 <= serial_rx; | |
| regs1 <= regs0; | |
| end | |
| lm32_cpu #( | |
| .eba_reset(32'h00000000) | |
| ) lm32_cpu ( | |
| .D_ACK_I(dbus_ack), | |
| .D_DAT_I(dbus_dat_r), | |
| .D_ERR_I(dbus_err), | |
| .D_RTY_I(1'd0), | |
| .I_ACK_I(ibus_ack), | |
| .I_DAT_I(ibus_dat_r), | |
| .I_ERR_I(ibus_err), | |
| .I_RTY_I(1'd0), | |
| .clk_i(sys_clk), | |
| .interrupt(interrupt), | |
| .rst_i(sys_rst), | |
| .D_ADR_O(d_adr_o), | |
| .D_BTE_O(dbus_bte), | |
| .D_CTI_O(dbus_cti), | |
| .D_CYC_O(dbus_cyc), | |
| .D_DAT_O(dbus_dat_w), | |
| .D_SEL_O(dbus_sel), | |
| .D_STB_O(dbus_stb), | |
| .D_WE_O(dbus_we), | |
| .I_ADR_O(i_adr_o), | |
| .I_BTE_O(ibus_bte), | |
| .I_CTI_O(ibus_cti), | |
| .I_CYC_O(ibus_cyc), | |
| .I_DAT_O(ibus_dat_w), | |
| .I_SEL_O(ibus_sel), | |
| .I_STB_O(ibus_stb), | |
| .I_WE_O(ibus_we) | |
| ); | |
| reg [31:0] mem[0:8191]; | |
| reg [31:0] memdat; | |
| always @(posedge sys_clk) begin | |
| memdat <= mem[rom_adr]; | |
| end | |
| assign rom_dat_r = memdat; | |
| initial begin | |
| $readmemh("mem.init", mem); | |
| end | |
| reg [31:0] mem_1[0:1023]; | |
| reg [9:0] memadr; | |
| always @(posedge sys_clk) begin | |
| if (sram_we[0]) | |
| mem_1[sram_adr][7:0] <= sram_dat_w[7:0]; | |
| if (sram_we[1]) | |
| mem_1[sram_adr][15:8] <= sram_dat_w[15:8]; | |
| if (sram_we[2]) | |
| mem_1[sram_adr][23:16] <= sram_dat_w[23:16]; | |
| if (sram_we[3]) | |
| mem_1[sram_adr][31:24] <= sram_dat_w[31:24]; | |
| memadr <= sram_adr; | |
| end | |
| assign sram_dat_r = mem_1[memadr]; | |
| reg [31:0] mem_2[0:4095]; | |
| reg [11:0] memadr_1; | |
| always @(posedge sys_clk) begin | |
| if (main_ram_we[0]) | |
| mem_2[main_ram_adr][7:0] <= main_ram_dat_w[7:0]; | |
| if (main_ram_we[1]) | |
| mem_2[main_ram_adr][15:8] <= main_ram_dat_w[15:8]; | |
| if (main_ram_we[2]) | |
| mem_2[main_ram_adr][23:16] <= main_ram_dat_w[23:16]; | |
| if (main_ram_we[3]) | |
| mem_2[main_ram_adr][31:24] <= main_ram_dat_w[31:24]; | |
| memadr_1 <= main_ram_adr; | |
| end | |
| assign main_ram_dat_r = mem_2[memadr_1]; | |
| reg [8:0] storage[0:15]; | |
| reg [3:0] memadr_2; | |
| always @(posedge sys_clk) begin | |
| if (uart_tx_fifo_wrport_we) | |
| storage[uart_tx_fifo_wrport_adr] <= uart_tx_fifo_wrport_dat_w; | |
| memadr_2 <= uart_tx_fifo_wrport_adr; | |
| end | |
| always @(posedge sys_clk) begin | |
| end | |
| assign uart_tx_fifo_wrport_dat_r = storage[memadr_2]; | |
| assign uart_tx_fifo_rdport_dat_r = storage[uart_tx_fifo_rdport_adr]; | |
| reg [8:0] storage_1[0:15]; | |
| reg [3:0] memadr_3; | |
| always @(posedge sys_clk) begin | |
| if (uart_rx_fifo_wrport_we) | |
| storage_1[uart_rx_fifo_wrport_adr] <= uart_rx_fifo_wrport_dat_w; | |
| memadr_3 <= uart_rx_fifo_wrport_adr; | |
| end | |
| always @(posedge sys_clk) begin | |
| end | |
| assign uart_rx_fifo_wrport_dat_r = storage_1[memadr_3]; | |
| assign uart_rx_fifo_rdport_dat_r = storage_1[uart_rx_fifo_rdport_adr]; | |
| // synthesis attribute shreg_extract of regs0 is no | |
| // synthesis attribute shreg_extract of regs1 is no | |
| // synthesis attribute register_balancing of regs0 is no | |
| // synthesis attribute register_balancing of regs1 is no | |
| endmodule |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment