diff --git a/memory/iodatabusmux.vhd b/memory/iodatabusmux.vhd index 995a03a8..a145ebaa 100644 --- a/memory/iodatabusmux.vhd +++ b/memory/iodatabusmux.vhd @@ -20,6 +20,7 @@ entity iodatabusmux is ddata_r_adc : in std_logic_vector(31 downto 0); ddata_r_i2c : in std_logic_vector(31 downto 0); ddata_r_timer : in std_logic_vector(31 downto 0); + ddata_r_stepmot : in std_logic_vector(31 downto 0); -- Mux ddata_r_periph : out std_logic_vector(31 downto 0) --! Connect to data bus mux @@ -37,6 +38,7 @@ begin ddata_r_adc when x"0003", ddata_r_i2c when x"0004", ddata_r_timer when x"0005", + ddata_r_stepmot when x"0009", -- Add new io peripherals here (others => '0')when others; diff --git a/memory/iram_quartus.vhd b/memory/iram_quartus.vhd index 4d461c29..29e4c6d9 100644 --- a/memory/iram_quartus.vhd +++ b/memory/iram_quartus.vhd @@ -65,7 +65,7 @@ BEGIN byte_size => 8, clock_enable_input_a => "BYPASS", clock_enable_output_a => "BYPASS", - init_file => "../../software/uart/quartus_main_irq.hex", + init_file => "../../software/step_motor/quartus_main_step_motor.hex", intended_device_family => "MAX 10", lpm_hint => "ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=1", lpm_type => "altsyncram", diff --git a/peripherals/spi/images/osc_spi_gifs.gif b/peripherals/spi/images/osc_spi_gifs.gif index b9ab8086..598b2774 100644 Binary files a/peripherals/spi/images/osc_spi_gifs.gif and b/peripherals/spi/images/osc_spi_gifs.gif differ diff --git a/peripherals/step_motor/sim.s b/peripherals/step_motor/sim.s new file mode 100644 index 00000000..e69de29b diff --git a/peripherals/step_motor/stepmotor.vhd b/peripherals/step_motor/stepmotor.vhd index fb04ebf3..0698fa75 100644 --- a/peripherals/step_motor/stepmotor.vhd +++ b/peripherals/step_motor/stepmotor.vhd @@ -8,15 +8,33 @@ use ieee.std_logic_1164.all; -- Elementos l use ieee.numeric_std.all; -- Conversões entre tipos entity stepmotor is + generic ( + --! Chip selec + MY_CHIPSELECT : std_logic_vector(1 downto 0) := "10"; + MY_WORD_ADDRESS : unsigned(7 downto 0) := x"10"; + DADDRESS_BUS_SIZE : integer := 32 + ); + port( clk : in std_logic; -- Clock input - reverse : in std_logic; -- Reverse flag: Changes the rotation direction rst : in std_logic; -- Reset flag: Changes the step motor to it's initial state + + -- Core data bus signals + daddress : in unsigned(DADDRESS_BUS_SIZE-1 downto 0); + ddata_w : in std_logic_vector(31 downto 0); + ddata_r : out std_logic_vector(31 downto 0); + d_we : in std_logic; + d_rd : in std_logic; + dcsel : in std_logic_vector(1 downto 0); --! Chip select + -- ToDo: Module should mask bytes (Word, half word and byte access) + dmask : in std_logic_vector(3 downto 0); --! Byte enable mask + + -- hardware input/output signals + reverse : in std_logic; -- Reverse flag: Changes the rotation direction stop : in std_logic; -- Stop flag: Stops the motor in it's actual position - ena : in std_logic; -- Enable flag: Permits motor control half_full : in std_logic; -- Half or full step flag: Alternate the steps size - in1, in2, in3, in4 : out std_logic; -- Motor H-bridge control inputs - speed : in unsigned(2 downto 0) -- Defines the motor speed, in a range from 1 to 8 + speed : in unsigned(2 downto 0); -- Defines the motor speed, in a range from 1 to 8 + in1, in2, in3, in4 : out std_logic -- Motor H-bridge control inputs ); end entity stepmotor; @@ -44,7 +62,7 @@ begin cntr <= cntr + 1; end if; end process rotate; - rot <= cntr(to_integer(speed)); + rot <= cntr(7-to_integer(speed)); mealy : process(rot, rst) begin @@ -52,75 +70,73 @@ begin state <= A; end if; if rising_edge(rot) then - if ena = '1' then - if stop = '0' then - case state is - when A => - if reverse = '1' and half_full = '0' then - state <= DA; - elsif reverse = '0' and half_full = '0' then - state <= AB; - elsif reverse = '1' and half_full = '1' then - state <= D; - else - state <= B; - end if; - when AB => - if reverse = '1' then - state <= A; - else - state <= B; - end if; - when B => - if reverse = '1' and half_full = '0' then - state <= AB; - elsif reverse = '0' and half_full = '0' then - state <= BC; - elsif reverse = '1' and half_full = '1' then - state <= A; - else - state <= C; - end if; - when BC => - if reverse = '1' then - state <= B; - else - state <= C; - end if; - when C => - if reverse = '1' and half_full = '0' then - state <= BC; - elsif reverse = '0' and half_full = '0' then - state <= CD; - elsif reverse = '1' and half_full = '1' then - state <= B; - else - state <= D; - end if; - when CD => - if reverse = '1' then - state <= C; - else - state <= D; - end if; - when D => - if reverse = '1' and half_full = '0' then - state <= C; - elsif reverse = '0' and half_full = '0' then - state <= DA; - elsif reverse = '1' and half_full = '1' then - state <= C; - else - state <= A; - end if; - when DA => - if reverse = '1' then - state <= D; - else - state <= A; - end if; - end case; - end if; + if stop = '0' then + case state is + when A => + if reverse = '1' and half_full = '0' then + state <= DA; + elsif reverse = '0' and half_full = '0' then + state <= AB; + elsif reverse = '1' and half_full = '1' then + state <= D; + else + state <= B; + end if; + when AB => + if reverse = '1' then + state <= A; + else + state <= B; + end if; + when B => + if reverse = '1' and half_full = '0' then + state <= AB; + elsif reverse = '0' and half_full = '0' then + state <= BC; + elsif reverse = '1' and half_full = '1' then + state <= A; + else + state <= C; + end if; + when BC => + if reverse = '1' then + state <= B; + else + state <= C; + end if; + when C => + if reverse = '1' and half_full = '0' then + state <= BC; + elsif reverse = '0' and half_full = '0' then + state <= CD; + elsif reverse = '1' and half_full = '1' then + state <= B; + else + state <= D; + end if; + when CD => + if reverse = '1' then + state <= C; + else + state <= D; + end if; + when D => + if reverse = '1' and half_full = '0' then + state <= C; + elsif reverse = '0' and half_full = '0' then + state <= DA; + elsif reverse = '1' and half_full = '1' then + state <= C; + else + state <= A; + end if; + when DA => + if reverse = '1' then + state <= D; + else + state <= A; + end if; + end case; end if; end if; end process mealy; diff --git a/peripherals/step_motor/tb_stepmotor.vhd b/peripherals/step_motor/tb_stepmotor-no_core.vhd similarity index 89% rename from peripherals/step_motor/tb_stepmotor.vhd rename to peripherals/step_motor/tb_stepmotor-no_core.vhd index 99f96496..f0044f51 100644 --- a/peripherals/step_motor/tb_stepmotor.vhd +++ b/peripherals/step_motor/tb_stepmotor-no_core.vhd @@ -26,7 +26,6 @@ begin reverse => reverse, rst => rst, stop => stop, - ena => ena, half_full => half_full, in1 => in1, in2 => in2, @@ -43,14 +42,6 @@ begin wait for 1 ms; end process clk0; - en0: process is - begin - ena <= '0'; - wait for 6 ms; - ena <= '1'; - wait; - end process en0; - speed0: process is begin rst <='0'; diff --git a/peripherals/step_motor/testbench.do b/peripherals/step_motor/testbench.do new file mode 100644 index 00000000..a9e2d045 --- /dev/null +++ b/peripherals/step_motor/testbench.do @@ -0,0 +1,186 @@ +#****************************************************************************** +# * +# Copyright (C) 2019 IFSC * +# * +# * +# All information provided herein is provided on an "as is" basis, * +# without warranty of any kind. * +# * +# File Name: testbench.do * +# * +# Function: riscv muticycle simulation script * +# * +# REVISION HISTORY: * +# Revision 0.1.0 08/01/2018 - Initial Revision * +# Revision 0.2.0 31/05/2021 - Change path and added some peripherals * +#****************************************************************************** + +vlib work +vcom ../../memory/iram_quartus.vhd +vcom ../../memory/dmemory.vhd +vcom ../../memory/instructionbusmux.vhd +vcom ../../memory/databusmux.vhd +vcom ../../memory/iodatabusmux.vhd +vcom ../../alu/alu_types.vhd +vcom ../../alu/alu.vhd +vcom ../../alu/m/division_functions.vhd +vcom ../../alu/m/quick_naive.vhd +vcom ../../alu/m/M_types.vhd +vcom ../../alu/m/M.vhd +vcom ../../decoder/decoder_types.vhd +vcom ../../decoder/iregister.vhd +vcom ../../decoder/decoder.vhd +vcom ../../registers/register_file.vhd +vcom ../../peripherals/gpio/gpio.vhd +vcom ../../peripherals/gpio/led_displays.vhd +vcom ../../peripherals/timer/Timer.vhd +vcom ./stepmotor.vhd +vcom ../../core/csr.vhd +vcom ../../core/core.vhd +vcom ../../core/txt_util.vhdl +vcom ../../core/trace_debug.vhd +vcom testbench.vhd + +vsim -t ns work.coretestbench + +view wave +add wave -radix binary /clk +add wave -radix binary /rst +add wave -height 15 -divider "Instruction Memory" +add wave -label iAddr -radix hex /address +add wave -label iWord -radix hex idata +add wave -label decoded -radix ASCII /debugString +# add wave /debugString +# add wave -radix hex /imem/RAM +# add wave -radix hex /q + +add wave -height 15 -divider "PC and Ctrl Targers" +add wave -radix hex -label pc /myRiscv/pc +add wave -radix hex -label jal_target /myRiscv/jal_target +add wave -radix hex -label jalr_target /myRiscv/jalr_target +add wave -label branch_cmp /myRiscv/branch_cmp +add wave -radix hex -label jumps /myRiscv/jumps + + +add wave -height 15 -divider "Iregister debug" +add wave -label opcode /myRiscv/opcodes +add wave -label rd /myRiscv/rd +add wave -label rs1 /myRiscv/rs1 +add wave -label rs2 /myRiscv/rs2 +add wave -label imm_i /myRiscv/imm_i +add wave -label imm_s /myRiscv/imm_s +add wave -label imm_b /myRiscv/imm_b +add wave -label imm_u /myRiscv/imm_u +add wave -label imm_j /myRiscv/imm_j + + +add wave -height 15 -divider "Register file debug" + add wave -label registers -radix hex /myRiscv/registers/ram + add wave -label w_ena /myRiscv/rf_w_ena + add wave -label w_data -radix hex /myRiscv/rw_data + add wave -label r1_data -radix hex /myRiscv/rs1_data + add wave -label r2_data -radix hex /myRiscv/rs2_data + +# decoder debug +add wave -label states /myRiscv/decoder0/state + +add wave -height 15 -divider "GPIO" +add wave -label enable_exti_mask -radix hex /generic_gpio/enable_exti_mask +add wave -label edge_exti_mask -radix hex /generic_gpio/edge_exti_mask +add wave -label output_reg -radix hex /generic_gpio/output_reg + +add wave -height 15 -divider "CSR" +add wave -label interrupts -radix hex /myRiscv/interrupts +add wave -label pending_interrupts -radix hex /myRiscv/ins_csr/pending_interrupts +add wave -label mret -radix hex /myRiscv/ins_csr/mret +add wave -label pending /myRiscv/pending +add wave -label csr_write /myRiscv/csr_write +add wave -label csr_addr /myRiscv/imm_i +add wave -label csr_value -radix hex /myRiscv/csr_value +add wave -label load_mepc -radix hex /myRiscv/load_mepc +# add wave -label load_mepc_holder -radix hex /myRiscv/ins_csr/load_mepc_holder +add wave -label mepc -radix hex /myRiscv/mepc +add wave -label mretpc -radix hex /myRiscv/mretpc +add wave -label csr_new -radix hex /myRiscv/rs1_data +# add wave -label mreg -radix hex /myRiscv/ins_csr/mreg + + +add wave -height 15 -divider "Alu debug" +add wave -radix dec -label aluData /myRiscv/alu_data +add wave -radix dec -label aluOut /myRiscv/alu_out + +add wave -height 15 -divider "M Extension debug" +add wave -label clock_32x /myRiscv/clk_32x +add wave -label code_operator /myRiscv/M_data.code +add wave -radix dec -label a_integer /myRiscv/M_data.a +add wave -radix dec -label b_integer /myRiscv/M_data.b +add wave -radix dec -label M_out /myRiscv/M_out + +add wave -height 15 -divider "Data memory debug" +add wave -label daddr -radix hex /myRiscv/memAddrTypeSBlock/addr +add wave -label fsm_data -radix hex /dmem/fsm_data +add wave -label ram_data -radix hex /dmem/ram_data +add wave -label mState /dmem/state +add wave -label fsm_we /dmem/fsm_we +add wave -label ddata_r_mem -radix hex /dmem/q +add wave -label datamemory -radix hex /dmem/ram_block + + +add wave -height 15 -divider "Data bus" +add wave -label daddress -radix hex /daddress +add wave -label ddata_r -radix hex /ddata_r +add wave -label ddata_w -radix hex /ddata_w +add wave -label dmask -radix bin /dmask +add wave -label dcsel /dcsel +add wave -label d_we /d_we +add wave -label d_rd /d_rd +add wave -label d_sig /d_sig + +add wave -height 15 -divider "Peripheral Data bus" +add wave -label daddress -radix hex /daddress +add wave -label ddata_r_periph -radix hex /ddata_r_periph +add wave -label ddata_r_gpio -radix hex /ddata_r_gpio + +add wave -label gpio_interrupts -radix hex /gpio_interrupts +add wave -label gpio_input -radix hex /gpio_input + +add wave -height 15 -divider "Timer" +add wave -label enable_timer_irq_mask -radix hex /timer/enable_timer_irq_mask +add wave -label timer_interrupt -radix hex /timer/timer_interrupt +add wave -label timer_reset -radix binary /timer/timer_reset +add wave -label timer_mode -radix unsigned /timer/timer_mode +add wave -label prescaler -radix unsigned /timer/prescaler +add wave -label top_counter -radix unsigned /timer/top_counter +add wave -label counter -radix unsigned /timer/counter +add wave -label compare_0A -radix unsigned /timer/compare_0A +add wave -label compare_0B -radix unsigned /timer/compare_0B +add wave -label compare_1A -radix unsigned /timer/compare_1A +add wave -label compare_1B -radix unsigned /timer/compare_1B +add wave -label compare_2A -radix unsigned /timer/compare_2A +add wave -label compare_2B -radix unsigned /timer/compare_2B +add wave -label output_0A -radix binary /timer/output_A(0) +add wave -label output_0B -radix binary /timer/output_B(0) +add wave -label output_1A -radix binary /timer/output_A(1) +add wave -label output_1B -radix binary /timer/output_B(1) +add wave -label output_2A -radix binary /timer/output_A(2) +add wave -label output_2B -radix binary /timer/output_B(2) +add wave -label internal_clock -radix binary /timer/internal_clock + + +add wave -height 15 -divider "Input/Output SIM" +add wave -label LEDR -radix hex /LEDR +add wave -label HEX0 -radix hex /HEX0 +add wave -label ARDUINO_IO -radix hex /ARDUINO_IO + +add wave -height 15 -divider "Step Motor" +add wave -radix binary -label reverse /reverse +add wave -radix binary -label restart /rst +add wave -radix binary -label stop /stop +add wave -radix binary -label half_full /half_full +add wave -radix unsigned -label speed /speed +add wave -radix binary -label outputs /outputs +add wave -label state /motor0/state + + +run 2000 us +wave zoomfull diff --git a/peripherals/step_motor/testbench.vhd b/peripherals/step_motor/testbench.vhd new file mode 100644 index 00000000..29126716 --- /dev/null +++ b/peripherals/step_motor/testbench.vhd @@ -0,0 +1,369 @@ +------------------------------------------------------- +--! @file +--! @brief RISCV Testbench +-- This testbench simulates a core with a +-- generic IO hardware and a Timer +-- +------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.decoder_types.all; + +entity coretestbench is + generic( + --! Num of 32-bits memory words + IMEMORY_WORDS : integer := 1024; --!= 4K (1024 * 4) bytes + DMEMORY_WORDS : integer := 1024 --!= 2k (512 * 2) bytes + ); + + port( + ----------- SEG7 ------------ + HEX0 : out std_logic_vector(7 downto 0); + HEX1 : out std_logic_vector(7 downto 0); + HEX2 : out std_logic_vector(7 downto 0); + HEX3 : out std_logic_vector(7 downto 0); + HEX4 : out std_logic_vector(7 downto 0); + HEX5 : out std_logic_vector(7 downto 0); + ----------- SW ------------ + + SW: in std_logic_vector(9 downto 0); + LEDR: out std_logic_vector(9 downto 0); + + ---------- ARDUINO IO ----- + ARDUINO_IO: inout std_logic_vector(15 downto 0) + ); + + +end entity coretestbench; + +architecture RTL of coretestbench is + -- Clocks and reset + signal clk : std_logic; + signal clk_32x : std_logic; + signal rst : std_logic; + + -- Instruction bus and instruction memory + signal address : std_logic_vector(9 downto 0); + signal iaddress : unsigned(15 downto 0); + signal idata : std_logic_vector(31 downto 0); + + -- Data bus + signal daddress : unsigned(31 downto 0); + signal ddata_r : std_logic_vector(31 downto 0); + signal ddata_w : std_logic_vector(31 downto 0); + signal dmask : std_logic_vector(3 downto 0); + signal dcsel : std_logic_vector(1 downto 0); + signal d_we : std_logic := '0'; + signal ddata_r_mem : std_logic_vector(31 downto 0); + signal d_rd : std_logic; + signal d_sig : std_logic; + + -- Modelsim debug signals + signal cpu_state : cpu_state_t; + signal debugString : string(1 to 40) := (others => '0'); + + -- I/O signals + signal interrupts : std_logic_vector(31 downto 0); + signal ddata_r_gpio : std_logic_vector(31 downto 0); + signal gpio_input : std_logic_vector(31 downto 0); + signal gpio_output : std_logic_vector(31 downto 0); + + signal ddata_r_timer : std_logic_vector(31 downto 0); + signal timer_interrupt : std_logic_vector(5 downto 0); + signal ddata_r_periph : std_logic_vector(31 downto 0); + signal ddata_r_sdram : std_logic_vector(31 downto 0); + + signal gpio_interrupts : std_logic_vector(6 downto 0); + signal ddata_r_segments : std_logic_vector(31 downto 0); + signal ddata_r_uart : std_logic_vector(31 downto 0); + signal ddata_r_adc : std_logic_vector(31 downto 0); + signal ddata_r_i2c : std_logic_vector(31 downto 0); + + -- StepMotor signals + signal ddata_r_stepmot : std_logic_vector(31 downto 0); + signal reverse, stop : std_logic; + signal half_full : std_logic; + signal in1: std_logic; + signal in2: std_logic; + signal in3: std_logic; + signal in4: std_logic; + signal speed : unsigned(2 downto 0); + signal outputs : std_logic_vector(3 downto 0); + +begin + + clock_driver : process + constant period : time := 1000 ns; + begin + clk <= '0'; + wait for period / 2; + clk <= '1'; + wait for period / 2; + end process clock_driver; + + --! Division unit clock + clock_driver_32x : process + constant period : time := 20 ns; + begin + clk_32x <= '0'; + wait for period / 2; + clk_32x <= '1'; + wait for period / 2; + end process clock_driver_32x; + + reset : process is + begin + rst <= '1'; + wait for 150 ns; + rst <= '0'; + wait; + end process reset; + + step_test: process + begin + outputs(0) <= in1; outputs(1) <= in2; outputs(2) <= in3; outputs(3) <= in4; + stop <= '0'; + speed <= to_unsigned(0,speed'length); + half_full <= '0'; + reverse <= '0'; + wait for 14000 ns; + + stop <= '1'; + wait for 2000 ns; + + stop <= '0'; + half_full <= '1'; + wait for 14000 ns; + + reverse <= '1'; + wait for 2000 ns; + + reverse <= '0'; + half_full <= '0'; + for i in 0 to 7 loop + speed <= to_unsigned(i, speed'length); + wait for 20 ms; + end loop; + + speed <= to_unsigned(0, speed'length); + + wait; + + end process step_test; + + + -- Connect gpio data to output hardware + LEDR <= gpio_output(9 downto 0); + + -- Connect input hardware to gpio data + gpio_test: process + begin + gpio_input <= (others => '0'); + wait for 500 us; + + -- Generate a input pulse (External IRQ 0 or pooling) + gpio_input(0) <= '1'; + wait for 1 us; + gpio_input(0) <= '0'; + + -- Generate a input pulse (External IRQ 1 or pooling) + wait for 200 us; + gpio_input(1) <= '1'; + wait for 1 us; + gpio_input(1) <= '0'; + + wait; + end process; + + -- IMem shoud be read from instruction and data buses + -- Not enough RAM ports for instruction bus, data bus and in-circuit programming + instr_mux: entity work.instructionbusmux + port map( + d_rd => d_rd, + dcsel => dcsel, + daddress => daddress, + iaddress => iaddress, + address => address + ); + + -- 32-bits x 1024 words quartus RAM (dual port: portA -> riscV, portB -> In-System Mem Editor + iram_quartus_inst : entity work.iram_quartus + port map( + address => address(9 downto 0), + byteena => "1111", + clock => clk, + data => (others => '0'), + wren => '0', + q => idata + ); + + -- dmemory_address <= daddress; + -- Data Memory RAM + dmem : entity work.dmemory + generic map( + MEMORY_WORDS => DMEMORY_WORDS + ) + port map( + rst => rst, + clk => clk, + data => ddata_w, + address => daddress, + we => d_we, + signal_ext => d_sig, + csel => dcsel(0), + dmask => dmask, + q => ddata_r_mem + ); + + -- Adress space mux ((check sections.ld) -> Data chip select: + -- 0x00000 -> Instruction memory + -- 0x20000 -> Data memory + -- 0x40000 -> Input/Output generic address space + -- 0x60000 -> SDRAM address space + data_bus_mux: entity work.databusmux + port map( + dcsel => dcsel, + idata => idata, + ddata_r_mem => ddata_r_mem, + ddata_r_periph => ddata_r_periph, + ddata_r_sdram => ddata_r_sdram, + ddata_r => ddata_r + ); + + io_data_bus_mux: entity work.iodatabusmux + port map( + daddress => daddress, + ddata_r_gpio => ddata_r_gpio, + ddata_r_segments => ddata_r_segments, + ddata_r_uart => ddata_r_uart, + ddata_r_adc => ddata_r_adc, + ddata_r_i2c => ddata_r_i2c, + ddata_r_timer => ddata_r_timer, + ddata_r_stepmot => ddata_r_stepmot, + ddata_r_periph => ddata_r_periph + ); + + -- Softcore instatiation + myRiscv : entity work.core + port map( + clk => clk, + rst => rst, + clk_32x => clk_32x, + iaddress => iaddress, + idata => idata, + daddress => daddress, + ddata_r => ddata_r, + ddata_w => ddata_w, + d_we => d_we, + d_rd => d_rd, + d_sig => d_sig, + dcsel => dcsel, + dmask => dmask, + interrupts=>interrupts, + state => cpu_state + ); + + -- Group IRQ signals. + irq_signals: process(timer_interrupt,gpio_interrupts) + begin + interrupts <= (others => '0'); + interrupts(24 downto 18) <= gpio_interrupts(6 downto 0); + interrupts(30 downto 25) <= timer_interrupt; + end process; + + + -- Timer instantiation + timer : entity work.Timer + generic map( + prescaler_size => 16, + compare_size => 32 + ) + port map( + clock => clk, + reset => rst, + daddress => daddress, + ddata_w => ddata_w, + ddata_r => ddata_r_timer, + d_we => d_we, + d_rd => d_rd, + dcsel => dcsel, + dmask => dmask, + timer_interrupt => timer_interrupt + ); + + -- Generic GPIO module instantiation + generic_gpio: entity work.gpio + port map( + clk => clk, + rst => rst, + daddress => daddress, + ddata_w => ddata_w, + ddata_r => ddata_r_gpio, + d_we => d_we, + d_rd => d_rd, + dcsel => dcsel, + dmask => dmask, + input => gpio_input, + output => gpio_output, + gpio_interrupts => gpio_interrupts + ); + + generic_displays : entity work.led_displays + port map( + clk => clk, + rst => rst, + daddress => daddress, + ddata_w => ddata_w, + ddata_r => ddata_r_segments, + d_we => d_we, + d_rd => d_rd, + dcsel => dcsel, + dmask => dmask, + hex0 => HEX0, + hex1 => HEX1, + hex2 => HEX2, + hex3 => HEX3, + hex4 => HEX4, + hex5 => HEX5, + hex6 => open, + hex7 => open + ); + + -- Stepmotor instantiation + motor0: entity work.stepmotor + port map( + clk => clk, + rst => rst, + daddress => daddress, + ddata_w => ddata_w, + ddata_r => ddata_r, + d_we => d_we, + d_rd => d_rd, + dcsel => dcsel, + dmask => dmask, + reverse => reverse, + stop => stop, + half_full => half_full, + speed => speed, + in1 => in1, + in2 => in2, + in3 => in3, + in4 => in4 + ); + + -- FileOutput DEBUG + debug : entity work.trace_debug + generic map( + MEMORY_WORDS => IMEMORY_WORDS + ) + port map( + pc => iaddress, + data => idata, + inst => debugString + ); + +end architecture RTL; diff --git a/peripherals/step_motor/vsim.wlf b/peripherals/step_motor/vsim.wlf index d63a48da..71d1508a 100644 Binary files a/peripherals/step_motor/vsim.wlf and b/peripherals/step_motor/vsim.wlf differ diff --git a/peripherals/step_motor/work/_info b/peripherals/step_motor/work/_info index cb9a3c8b..30225500 100644 --- a/peripherals/step_motor/work/_info +++ b/peripherals/step_motor/work/_info @@ -9,38 +9,38 @@ z2 !i10f 100 cModel Technology Z0 dC:/Users/rayan/Documents/GitHub/riscv-multicycle/peripherals/step_motor -Estepmotor -Z1 w1631411376 -Z2 DPx4 ieee 11 numeric_std 0 22 aU^R8eGcicLcUFIaBQSL>3 -Z3 DPx3 std 6 textio 0 22 zE1`LPoLg^DX3Oz^4Fj1K3 -Z4 DPx4 ieee 14 std_logic_1164 0 22 cVAk:aDinOX8^VGI1ekP<3 -!i122 6 +Palu_types +Z1 DPx4 ieee 11 numeric_std 0 22 aU^R8eGcicLcUFIaBQSL>3 +Z2 DPx3 std 6 textio 0 22 zE1`LPoLg^DX3Oz^4Fj1K3 +Z3 DPx4 ieee 14 std_logic_1164 0 22 cVAk:aDinOX8^VGI1ekP<3 +!i122 107 +Z4 w1631401588 R0 -Z5 8stepmotor.vhd -Z6 Fstepmotor.vhd +Z5 8../../alu/alu_types.vhd +Z6 F../../alu/alu_types.vhd l0 -L10 1 -VRGa4cnclWom;dB=?6`1_[2 -!s100 FEW6>`>5==XejOdSi0F:e3 +L5 1 +V]^WT3H3 +!s100 jB7m^WT3H3 +R1 R2 R3 -R4 -Z13 DEx4 work 9 stepmotor 0 22 RGa4cnclWom;dB=?6`1_[2 -!i122 6 -l30 -Z14 L24 127 -Z15 VBl?O0?m]IWiU;Qai@;FXf2 -Z16 !s100 >Ak`S;8YIlFC]QOIH_1WS2 +!i122 107 +l0 +L56 1 +VLL^hYXN30dUS:;kWmhYmL0 +!s100 8QgWPZjm2:P`:gb?1T91B2 R7 32 R8 @@ -50,45 +50,1037 @@ R10 R11 !i113 1 R12 -Etb_stepmotor -Z17 w1631411894 +Ecore +R4 +Z14 DPx4 work 7 m_types 0 22 6KG_lULE^j]jX0g;d@FAb3 +R13 +Z15 DPx4 work 13 decoder_types 0 22 E_bHn;IFj0cbL^GG0laaU0 +R1 +R2 +R3 +!i122 122 +R0 +Z16 8../../core/core.vhd +Z17 F../../core/core.vhd +l0 +L9 1 +V^OYl;KQhe9mbUEV<_k^L90 +!s100 a^23:bAo8n;o8Tn@U`AOK2 +R7 +32 +Z18 !s110 1631492093 +!i10b 1 +Z19 !s108 1631492092.000000 +Z20 !s90 -reportprogress|300|../../core/core.vhd| +Z21 !s107 ../../core/core.vhd| +!i113 1 +R12 +Artl +Z22 DEx4 work 1 m 0 22 0Nm0_TcTQ0V>Mj?EW^4oV2 +Z23 DEx4 work 3 ula 0 22 _hQ6FLQFcFN3nP4VbZ3XY0 +Z24 DEx4 work 7 decoder 0 22 @`C28F9BSAh_7QjbIPSVm3 +Z25 DEx4 work 13 register_file 0 22 m?:Z4M399[eR5U^`0P6d81 +Z26 DEx4 work 9 iregister 0 22 G1YibgKIQb[f8mRDA;kdM1 +Z27 DEx4 work 3 csr 0 22 MFT1>S]ZAQ:JelJ<0 +R14 +R13 +R15 +R1 +R2 +R3 +Z28 DEx4 work 4 core 0 22 ^OYl;KQhe9mbUEV<_k^L90 +!i122 122 +l95 +L41 326 +Vz[I7QOB66I7_LglZ6E_D>2 +!s100 o7n^B>;1AfdbAGb7j0zgb3 +R7 +32 +R18 +!i10b 1 +R19 +R20 +R21 +!i113 1 +R12 +Ecoretestbench +Z29 w1631492077 +R15 +R1 +R2 +R3 +!i122 125 +R0 +Z30 8testbench.vhd +Z31 Ftestbench.vhd +l0 +Z32 L16 1 +V1?KP_Mi7Rf_]A6oX8O1;>2 +!s100 0eZn^mbN[1kHYoC=fY]GW2 +R7 +32 +R18 +!i10b 1 +Z33 !s108 1631492093.000000 +Z34 !s90 -reportprogress|300|testbench.vhd| +Z35 !s107 testbench.vhd| +!i113 1 +R12 +Artl +Z36 DPx4 work 8 txt_util 0 22 OM1Nc<1Xic]h2lmMohkE71 +Z37 DEx4 work 11 trace_debug 0 22 _jh1QjJ2^lFZKcmWklia33 +Z38 DEx4 work 9 stepmotor 0 22 XGV`zHmMaSLY938NnN2^V0 +Z39 DEx4 work 12 led_displays 0 22 d_SeKdb8L67T[M:bZfZJO2 +Z40 DEx4 work 4 gpio 0 22 j;2 +!i122 125 +l97 +Z49 L43 327 +V;GYS7zOdfGcV[6lR=24no3 +!s100 jTA3`lA?i0>SVlPXGkZFg0 +R7 +32 +R18 +!i10b 1 +R33 +R34 +R35 +!i113 1 +R12 +Ecsr R4 -!i122 6 +R15 +R1 +R2 +R3 +!i122 121 R0 -Z18 8tb_stepmotor.vhd -Z19 Ftb_stepmotor.vhd +Z50 8../../core/csr.vhd +Z51 F../../core/csr.vhd l0 L6 1 -VKFJBX=L65oZ:V>6naD>?m3 -!s100 PgVCU]oKP[5AgP=`B0g6T0 +VMFT1>S]ZAQ:JelJ<0 +!s100 jk6CCebQNSLk?QQfmSj`A3 +R7 +32 +Z52 !s110 1631492092 +!i10b 1 +R19 +Z53 !s90 -reportprogress|300|../../core/csr.vhd| +Z54 !s107 ../../core/csr.vhd| +!i113 1 +R12 +Artl +R15 +R1 +R2 +R3 +R27 +!i122 121 +l75 +L25 254 +VS34h`=>ZXeKS;3XK7;YcR1 +!s100 3F:SbOf]]D]k1QXYgjE=m1 +R7 +32 +R52 +!i10b 1 +R19 +R53 +R54 +!i113 1 +R12 +Edatabusmux +R4 +R1 +R2 +R3 +!i122 105 +R0 +Z55 8../../memory/databusmux.vhd +Z56 F../../memory/databusmux.vhd +l0 +Z57 L17 1 +V?JGPW557I4OC5L6RbHl030 +!s100 N9QJlz[i2?JMK^@D@izEO0 R7 32 R8 !i10b 1 R9 -R10 -R11 +Z58 !s90 -reportprogress|300|../../memory/databusmux.vhd| +Z59 !s107 ../../memory/databusmux.vhd| !i113 1 R12 Artl +R1 +R2 +R3 +R43 +!i122 105 +l33 +L31 17 +V[biN:SoE:mWQCbCfWFFE_2 +!s100 :aKl@j@j=^D==0k06zn:Q1 +R7 +32 +R8 +!i10b 1 +R9 +R58 +R59 +!i113 1 +R12 +Edecoder +R4 +R14 +R15 R13 +R1 +R2 +R3 +!i122 115 +R0 +Z60 8../../decoder/decoder.vhd +Z61 F../../decoder/decoder.vhd +l0 +L9 1 +V@`C28F9BSAh_7QjbIPSVm3 +!s100 :AQmUQ1_fD97mConZhfH93 +R7 +32 +Z62 !s110 1631492091 +!i10b 1 +Z63 !s108 1631492091.000000 +Z64 !s90 -reportprogress|300|../../decoder/decoder.vhd| +Z65 !s107 ../../decoder/decoder.vhd| +!i113 1 +R12 +Artl +R14 +R15 +R13 +R1 +R2 +R3 +R24 +!i122 115 +l60 +L52 346 +VR57VlTB`@B3`e1MKN9Qn00 +!s100 Y;m1>;g`WGTH0hN2 +R7 +32 +Z68 !s110 1631492090 +!i10b 1 +Z69 !s108 1631492090.000000 +Z70 !s90 -reportprogress|300|../../decoder/decoder_types.vhd| +Z71 !s107 ../../decoder/decoder_types.vhd| +!i113 1 +R12 +Bbody +R15 +R2 +R3 +!i122 113 +l0 +L147 1 +VTj[9jfhQDG4^D>Qh`QioP1 +!s100 I1Z6TgIh8CA6g=ZPQl9:heHJ2IY08N3 +!s100 4hJ[Rj8`go?GkILB[0FX91 +R7 +32 +b1 +R68 +!i10b 1 +R69 +Z74 !s90 -reportprogress|300|../../alu/m/division_functions.vhd| +Z75 !s107 ../../alu/m/division_functions.vhd| +!i113 1 +R12 +Bbody +Z76 DPx4 work 18 division_functions 0 22 5VBD>ZPQl9:heHJ2IY08N3 +R3 +R2 +R1 +!i122 109 +l0 +Z77 L19 1 +Vh]@UP3P8AE1;DR`7TlzND1 +!s100 5?MYVTWOID`cWz]GCX?Ib2 +R7 +32 +R68 +!i10b 1 +R69 +R74 +R75 +!i113 1 +R12 +Edmemory +R4 +R1 +R2 +R3 +!i122 103 +R0 +Z78 8../../memory/dmemory.vhd +Z79 F../../memory/dmemory.vhd +l0 +R77 +V0z^>[YZRZ2 +R7 +32 +R62 +!i10b 1 +R63 +Z86 !s90 -reportprogress|300|../../peripherals/gpio/gpio.vhd| +Z87 !s107 ../../peripherals/gpio/gpio.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +R40 +!i122 117 +l57 +L44 93 +Vk1o^3UBTnCj2af_Q2e0 +R7 +32 +R8 +!i10b 1 +R9 +Z97 !s90 -reportprogress|300|../../memory/iodatabusmux.vhd| +Z98 !s107 ../../memory/iodatabusmux.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +R42 +!i122 106 +l32 +R93 +VKOc712a3_H@bAf=V_T6eR3 +!s100 U>T7^j3]?zjPIISaED3 +R7 +32 +R8 +!i10b 1 +R9 +R97 +R98 +!i113 1 +R12 +Eiram_quartus +Z99 w1631487211 +R45 +R2 +R3 +!i122 102 +R0 +Z100 8../../memory/iram_quartus.vhd +Z101 F../../memory/iram_quartus.vhd +l0 +L43 1 +Vf7QWglBCaO26ReA4_JfH31 +!s100 O=lQXn14`a0;aGmHAYF2M1 +R7 +32 +Z102 !s110 1631492088 +!i10b 1 +Z103 !s108 1631492088.000000 +Z104 !s90 -reportprogress|300|../../memory/iram_quartus.vhd| +Z105 !s107 ../../memory/iram_quartus.vhd| +!i113 1 +R12 +Asyn +R45 +R2 +R3 +R46 +!i122 102 +l60 +L56 38 +VKLACRcI9Ff7605eRYh^de0 +!s100 n1?z<;3P`1^S1 +R7 +32 +R62 +!i10b 1 +R63 +R112 +R113 +!i113 1 +R12 +Em R4 -Z20 DEx4 work 12 tb_stepmotor 0 22 KFJBX=L65oZ:V>6naD>?m3 -!i122 6 +R14 +R3 +R2 +R1 +!i122 112 +R0 +Z114 8../../alu/m/M.vhd +Z115 F../../alu/m/M.vhd +l0 +R32 +V0Nm0_TcTQ0V>Mj?EW^4oV2 +!s100 WcV13@ijCQ;^BkjjH`<`43 +R7 +32 +R68 +!i10b 1 +R69 +Z116 !s90 -reportprogress|300|../../alu/m/M.vhd| +Z117 !s107 ../../alu/m/M.vhd| +!i113 1 +R12 +Artl +R76 +Z118 DEx4 work 11 quick_naive 0 22 M>]Y4P2 +R14 +R3 +R2 +R1 +R22 +!i122 112 +l53 +L25 121 +VNdBCJR=Jb;[d;2 +!s100 >Y?QnL03gT8_UVGQ4TXV^0 +R7 +32 +R68 +!i10b 1 +R69 +R116 +R117 +!i113 1 +R12 +Pm_types +R1 +R2 +R3 +!i122 111 +R4 +R0 +Z119 8../../alu/m/M_types.vhd +Z120 F../../alu/m/M_types.vhd +l0 +L5 1 +V6KG_lULE^j]jX0g;d@FAb3 +!s100 _;3k6]1]Y4P2 +!s100 NbI1 +R7 +32 +R68 +!i10b 1 +R69 +Z125 !s90 -reportprogress|300|../../alu/m/quick_naive.vhd| +Z126 !s107 ../../alu/m/quick_naive.vhd| +!i113 1 +R12 +Abehave +R76 +R3 +R2 +R1 +R118 +!i122 110 +l39 +L32 73 +VB8T;6P4KkfOY6MV6fR?152 +!s100 MUiekK7JIBaV@Yg@2PnV22 +R7 +32 +R68 +!i10b 1 +R69 +R125 +R126 +!i113 1 +R12 +Eregister_file +Z127 w1631401591 +R1 +R2 +R3 +!i122 116 +R0 +Z128 8../../registers/register_file.vhd +Z129 F../../registers/register_file.vhd +l0 +L5 1 +Vm?:Z4M399[eR5U^`0P6d81 +!s100 M]N^jblJYQG?EDoMzM=zh3 +R7 +32 +R62 +!i10b 1 +R63 +Z130 !s90 -reportprogress|300|../../registers/register_file.vhd| +Z131 !s107 ../../registers/register_file.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +R25 +!i122 116 +l43 +L24 49 +VHo6_CN^`YUL:4eOYa5IJ@3 +!s100 [GOAK4=b3EWaShBnVBo1T3 +R7 +32 +R62 +!i10b 1 +R63 +R130 +R131 +!i113 1 +R12 +Estepmotor +Z132 w1631481017 +R1 +R2 +R3 +!i122 120 +R0 +Z133 8./stepmotor.vhd +Z134 F./stepmotor.vhd +l0 +L10 1 +VXGV`zHmMaSLY938NnN2^V0 +!s100 Mh>L^2dEkA_DQBgg:J30S2 +R7 +32 +R52 +!i10b 1 +R19 +Z135 !s90 -reportprogress|300|./stepmotor.vhd| +Z136 !s107 ./stepmotor.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +R38 +!i122 120 +l48 +L42 126 +VmOeOOURW6j=54Zg^WC7L12 +!s100 15@neL6naD>?m3 +!s100 PgVCU]oKP[5AgP=`B0g6T0 +R7 +32 +Z140 !s110 1631415558 +!i10b 1 +Z141 !s108 1631415558.000000 +Z142 !s90 -reportprogress|300|stepmotor.vhd|tb_stepmotor.vhd| +Z143 !s107 tb_stepmotor.vhd|stepmotor.vhd| +!i113 1 +R12 +Artl +DEx4 work 9 stepmotor 0 22 RGa4cnclWom;dB=?6`1_[2 +R1 +R2 +R3 +DEx4 work 12 tb_stepmotor 0 22 KFJBX=L65oZ:V>6naD>?m3 +!i122 11 l19 L10 84 VbDU5X>4bPnn2oH6:SI>m[1 !s100 l9FUkimFLh^z2]fP[QNb]2 R7 32 +R140 +!i10b 1 +R141 +R142 +R143 +!i113 1 +R12 +Etimer +R127 +R1 +R2 +R3 +!i122 119 +R0 +Z144 8../../peripherals/timer/Timer.vhd +Z145 F../../peripherals/timer/Timer.vhd +l0 +L5 1 +VTkz^_o;1=@4bifBC6D_PB0 +!s100 DNnez@]6Vzjfo[R9==8^61 +R7 +32 +R52 +!i10b 1 +R19 +Z146 !s90 -reportprogress|300|../../peripherals/timer/Timer.vhd| +Z147 !s107 ../../peripherals/timer/Timer.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +R41 +!i122 119 +l53 +L26 396 +V:lnZCB53eZZki5Vg1g^lH3 +!s100 gYbWh>2dzO7TMKH_2d8Dk1 +R7 +32 +R52 +!i10b 1 +R19 +R146 +R147 +!i113 1 +R12 +Etrace_debug +R4 +R36 +R15 +R1 +R2 +R3 +!i122 124 +R0 +Z148 8../../core/trace_debug.vhd +Z149 F../../core/trace_debug.vhd +l0 +R90 +V_jh1QjJ2^lFZKcmWklia33 +!s100 f7]JNN5[F[]=lgEkaj4j]2 +R7 +32 +R18 +!i10b 1 +R33 +Z150 !s90 -reportprogress|300|../../core/trace_debug.vhd| +Z151 !s107 ../../core/trace_debug.vhd| +!i113 1 +R12 +Artl +R36 +R15 +R1 +R2 +R3 +R37 +!i122 124 +l98 +L25 444 +V6VEdUoj@6hFa?Q]Bgh[2z3 +!s100 0c1h`S[n3m2MR3mgFV47F3 +R7 +32 +R18 +!i10b 1 +R33 +R150 +R151 +!i113 1 +R12 +Ptxt_util +R2 +R3 +!i122 123 +R4 +R0 +Z152 8../../core/txt_util.vhdl +Z153 F../../core/txt_util.vhdl +l0 +L6 1 +VOM1Nc<1Xic]h2lmMohkE71 +!s100 C4m7@Ec3EHGT95Z]IhUzf>cHTTGDBF0 +R7 +32 R8 !i10b 1 R9 -R10 -R11 +Z158 !s90 -reportprogress|300|../../alu/alu.vhd| +Z159 !s107 ../../alu/alu.vhd| +!i113 1 +R12 +Artl +R13 +R1 +R2 +R3 +R23 +!i122 108 +l23 +L14 39 +V^o6dEYZ`RPRG^n3Q]nJb33 +!s100 iXh3 +Z2 DPx3 std 6 textio 0 22 zE1`LPoLg^DX3Oz^4Fj1K3 +Z3 DPx4 ieee 14 std_logic_1164 0 22 cVAk:aDinOX8^VGI1ekP<3 +!i122 5 +Z4 w1631401588 +R0 +Z5 8./alu/alu_types.vhd +Z6 F./alu/alu_types.vhd +l0 +L5 1 +V]^WT3H3 +!s100 jB7m^WT3H3 +R1 +R2 +R3 +!i122 5 +l0 +L56 1 +VLL^hYXN30dUS:;kWmhYmL0 +!s100 8QgWPZjm2:P`:gb?1T91B2 +R7 +32 +R8 +!i10b 1 +R9 +R10 +R11 +!i113 1 +R12 +Ecore +R4 +Z14 DPx4 work 7 m_types 0 22 6KG_lULE^j]jX0g;d@FAb3 +R13 +Z15 DPx4 work 13 decoder_types 0 22 E_bHn;IFj0cbL^GG0laaU0 +R1 +R2 +R3 +!i122 19 +R0 +Z16 8./core/core.vhd +Z17 F./core/core.vhd +l0 +L9 1 +V^OYl;KQhe9mbUEV<_k^L90 +!s100 a^23:bAo8n;o8Tn@U`AOK2 +R7 +32 +Z18 !s110 1631491588 +!i10b 1 +Z19 !s108 1631491587.000000 +Z20 !s90 -reportprogress|300|./core/core.vhd| +Z21 !s107 ./core/core.vhd| +!i113 1 +R12 +Artl +Z22 DEx4 work 1 m 0 22 0Nm0_TcTQ0V>Mj?EW^4oV2 +Z23 DEx4 work 3 ula 0 22 _hQ6FLQFcFN3nP4VbZ3XY0 +Z24 DEx4 work 7 decoder 0 22 @`C28F9BSAh_7QjbIPSVm3 +Z25 DEx4 work 13 register_file 0 22 m?:Z4M399[eR5U^`0P6d81 +Z26 DEx4 work 9 iregister 0 22 G1YibgKIQb[f8mRDA;kdM1 +Z27 DEx4 work 3 csr 0 22 MFT1>S]ZAQ:JelJ<0 +R14 +R13 +R15 +R1 +R2 +R3 +DEx4 work 4 core 0 22 ^OYl;KQhe9mbUEV<_k^L90 +!i122 19 +l95 +L41 326 +Vz[I7QOB66I7_LglZ6E_D>2 +!s100 o7n^B>;1AfdbAGb7j0zgb3 +R7 +32 +R18 +!i10b 1 +R19 +R20 +R21 +!i113 1 +R12 +Ecoretestbench +Z28 w1631401591 +R15 +R1 +R2 +R3 +!i122 22 +R0 +8testbench.vhd +Ftestbench.vhd +l0 +Z29 L16 1 +V1?KP_Mi7Rf_]A6oX8O1;>2 +!s100 0eZn^mbN[1kHYoC=fY]GW2 +R7 +32 +R18 +!i10b 1 +Z30 !s108 1631491588.000000 +!s90 -reportprogress|300|testbench.vhd| +!s107 testbench.vhd| +!i113 1 +R12 +Ecsr +R4 +R15 +R1 +R2 +R3 +!i122 18 +R0 +Z31 8./core/csr.vhd +Z32 F./core/csr.vhd +l0 +L6 1 +VMFT1>S]ZAQ:JelJ<0 +!s100 jk6CCebQNSLk?QQfmSj`A3 +R7 +32 +Z33 !s110 1631491587 +!i10b 1 +R19 +Z34 !s90 -reportprogress|300|./core/csr.vhd| +Z35 !s107 ./core/csr.vhd| +!i113 1 +R12 +Artl +R15 +R1 +R2 +R3 +R27 +!i122 18 +l75 +L25 254 +VS34h`=>ZXeKS;3XK7;YcR1 +!s100 3F:SbOf]]D]k1QXYgjE=m1 +R7 +32 +R33 +!i10b 1 +R19 +R34 +R35 +!i113 1 +R12 +Edatabusmux +R4 +R1 +R2 +R3 +!i122 3 +R0 +Z36 8./memory/databusmux.vhd +Z37 F./memory/databusmux.vhd +l0 +Z38 L17 1 +V?JGPW557I4OC5L6RbHl030 +!s100 N9QJlz[i2?JMK^@D@izEO0 +R7 +32 +R8 +!i10b 1 +Z39 !s108 1631491583.000000 +Z40 !s90 -reportprogress|300|./memory/databusmux.vhd| +Z41 !s107 ./memory/databusmux.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +DEx4 work 10 databusmux 0 22 ?JGPW557I4OC5L6RbHl030 +!i122 3 +l33 +L31 17 +V[biN:SoE:mWQCbCfWFFE_2 +!s100 :aKl@j@j=^D==0k06zn:Q1 +R7 +32 +R8 +!i10b 1 +R39 +R40 +R41 +!i113 1 +R12 +Edecoder +R4 +R14 +R15 +R13 +R1 +R2 +R3 +!i122 13 +R0 +Z42 8./decoder/decoder.vhd +Z43 F./decoder/decoder.vhd +l0 +L9 1 +V@`C28F9BSAh_7QjbIPSVm3 +!s100 :AQmUQ1_fD97mConZhfH93 +R7 +32 +Z44 !s110 1631491586 +!i10b 1 +Z45 !s108 1631491586.000000 +Z46 !s90 -reportprogress|300|./decoder/decoder.vhd| +Z47 !s107 ./decoder/decoder.vhd| +!i113 1 +R12 +Artl +R14 +R15 +R13 +R1 +R2 +R3 +R24 +!i122 13 +l60 +L52 346 +VR57VlTB`@B3`e1MKN9Qn00 +!s100 Y;m1>;g`WGTH0hN2 +R7 +32 +Z50 !s110 1631491585 +!i10b 1 +Z51 !s108 1631491585.000000 +Z52 !s90 -reportprogress|300|./decoder/decoder_types.vhd| +Z53 !s107 ./decoder/decoder_types.vhd| +!i113 1 +R12 +Bbody +R15 +R2 +R3 +!i122 11 +l0 +L147 1 +VTj[9jfhQDG4^D>Qh`QioP1 +!s100 I1Z6TgIh8CA6g=ZPQl9:heHJ2IY08N3 +!s100 4hJ[Rj8`go?GkILB[0FX91 +R7 +32 +b1 +R8 +!i10b 1 +R9 +Z56 !s90 -reportprogress|300|./alu/m/division_functions.vhd| +Z57 !s107 ./alu/m/division_functions.vhd| +!i113 1 +R12 +Bbody +Z58 DPx4 work 18 division_functions 0 22 5VBD>ZPQl9:heHJ2IY08N3 +R3 +R2 +R1 +!i122 7 +l0 +Z59 L19 1 +Vh]@UP3P8AE1;DR`7TlzND1 +!s100 5?MYVTWOID`cWz]GCX?Ib2 +R7 +32 +R8 +!i10b 1 +R9 +R56 +R57 +!i113 1 +R12 +Edmemory +R4 +R1 +R2 +R3 +!i122 1 +R0 +Z60 8./memory/dmemory.vhd +Z61 F./memory/dmemory.vhd +l0 +R59 +V0z^>[YZRZ2 +R7 +32 +R44 +!i10b 1 +R45 +Z69 !s90 -reportprogress|300|./peripherals/gpio/gpio.vhd| +Z70 !s107 ./peripherals/gpio/gpio.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +DEx4 work 4 gpio 0 22 j;j2af_Q2e0 +R7 +32 +R8 +!i10b 1 +R9 +Z80 !s90 -reportprogress|300|./memory/iodatabusmux.vhd| +Z81 !s107 ./memory/iodatabusmux.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +DEx4 work 12 iodatabusmux 0 22 4_7L28[;QjQ8Wj2?B`8PH1 +!i122 4 +l32 +R76 +VKOc712a3_H@bAf=V_T6eR3 +!s100 U>T7^j3]?zjPIISaED3 +R7 +32 +R8 +!i10b 1 +R9 +R80 +R81 +!i113 1 +R12 +Eiram_quartus +Z82 w1631487211 +Z83 DPx9 altera_mf 20 altera_mf_components 0 22 MILGFK[L`bXcS4=YTP`1^S1 +R7 +32 +R44 +!i10b 1 +R45 +R94 +R95 +!i113 1 +R12 +Em +R4 +R14 +R3 +R2 +R1 +!i122 10 +R0 +Z96 8./alu/m/M.vhd +Z97 F./alu/m/M.vhd +l0 +R29 +V0Nm0_TcTQ0V>Mj?EW^4oV2 +!s100 WcV13@ijCQ;^BkjjH`<`43 +R7 +32 +R50 +!i10b 1 +R51 +Z98 !s90 -reportprogress|300|./alu/m/M.vhd| +Z99 !s107 ./alu/m/M.vhd| +!i113 1 +R12 +Artl +R58 +Z100 DEx4 work 11 quick_naive 0 22 M>]Y4P2 +R14 +R3 +R2 +R1 +R22 +!i122 10 +l53 +L25 121 +VNdBCJR=Jb;[d;2 +!s100 >Y?QnL03gT8_UVGQ4TXV^0 +R7 +32 +R50 +!i10b 1 +R51 +R98 +R99 +!i113 1 +R12 +Pm_types +R1 +R2 +R3 +!i122 9 +R4 +R0 +Z101 8./alu/m/M_types.vhd +Z102 F./alu/m/M_types.vhd +l0 +L5 1 +V6KG_lULE^j]jX0g;d@FAb3 +!s100 _;3k6]1]Y4P2 +!s100 NbI1 +R7 +32 +R50 +!i10b 1 +R51 +Z107 !s90 -reportprogress|300|./alu/m/quick_naive.vhd| +Z108 !s107 ./alu/m/quick_naive.vhd| +!i113 1 +R12 +Abehave +R58 +R3 +R2 +R1 +R100 +!i122 8 +l39 +L32 73 +VB8T;6P4KkfOY6MV6fR?152 +!s100 MUiekK7JIBaV@Yg@2PnV22 +R7 +32 +R50 +!i10b 1 +R51 +R107 +R108 +!i113 1 +R12 +Eregister_file +R28 +R1 +R2 +R3 +!i122 14 +R0 +Z109 8./registers/register_file.vhd +Z110 F./registers/register_file.vhd +l0 +L5 1 +Vm?:Z4M399[eR5U^`0P6d81 +!s100 M]N^jblJYQG?EDoMzM=zh3 +R7 +32 +R44 +!i10b 1 +R45 +Z111 !s90 -reportprogress|300|./registers/register_file.vhd| +Z112 !s107 ./registers/register_file.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +R25 +!i122 14 +l43 +L24 49 +VHo6_CN^`YUL:4eOYa5IJ@3 +!s100 [GOAK4=b3EWaShBnVBo1T3 +R7 +32 +R44 +!i10b 1 +R45 +R111 +R112 +!i113 1 +R12 +Etimer +R28 +R1 +R2 +R3 +!i122 17 +R0 +Z113 8./peripherals/timer/Timer.vhd +Z114 F./peripherals/timer/Timer.vhd +l0 +L5 1 +VTkz^_o;1=@4bifBC6D_PB0 +!s100 DNnez@]6Vzjfo[R9==8^61 +R7 +32 +R33 +!i10b 1 +R19 +Z115 !s90 -reportprogress|300|./peripherals/timer/Timer.vhd| +Z116 !s107 ./peripherals/timer/Timer.vhd| +!i113 1 +R12 +Artl +R1 +R2 +R3 +DEx4 work 5 timer 0 22 Tkz^_o;1=@4bifBC6D_PB0 +!i122 17 +l53 +L26 396 +V:lnZCB53eZZki5Vg1g^lH3 +!s100 gYbWh>2dzO7TMKH_2d8Dk1 +R7 +32 +R33 +!i10b 1 +R19 +R115 +R116 +!i113 1 +R12 +Etrace_debug +R4 +Z117 DPx4 work 8 txt_util 0 22 OM1Nc<1Xic]h2lmMohkE71 +R15 +R1 +R2 +R3 +!i122 21 +R0 +Z118 8./core/trace_debug.vhd +Z119 F./core/trace_debug.vhd +l0 +R73 +V_jh1QjJ2^lFZKcmWklia33 +!s100 f7]JNN5[F[]=lgEkaj4j]2 +R7 +32 +R18 +!i10b 1 +R30 +Z120 !s90 -reportprogress|300|./core/trace_debug.vhd| +Z121 !s107 ./core/trace_debug.vhd| +!i113 1 +R12 +Artl +R117 +R15 +R1 +R2 +R3 +DEx4 work 11 trace_debug 0 22 _jh1QjJ2^lFZKcmWklia33 +!i122 21 +l98 +L25 444 +V6VEdUoj@6hFa?Q]Bgh[2z3 +!s100 0c1h`S[n3m2MR3mgFV47F3 +R7 +32 +R18 +!i10b 1 +R30 +R120 +R121 +!i113 1 +R12 +Ptxt_util +R2 +R3 +!i122 20 +R4 +R0 +Z122 8./core/txt_util.vhdl +Z123 F./core/txt_util.vhdl +l0 +L6 1 +VOM1Nc<1Xic]h2lmMohkE71 +!s100 C4m7@Ec3EHGT95Z]IhUzf>cHTTGDBF0 +R7 +32 +R8 +!i10b 1 +R9 +Z128 !s90 -reportprogress|300|./alu/alu.vhd| +Z129 !s107 ./alu/alu.vhd| +!i113 1 +R12 +Artl +R13 +R1 +R2 +R3 +R23 +!i122 6 +l23 +L14 39 +V^o6dEYZ`RPRG^n3Q]nJb33 +!s100 iXh