X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=cpu_fetch_stage.py;h=f3269fb75a9fe890c5e11c9be55c2f7bdcce3e39;hb=daafe882cb591c8e3a3a04f74561cc941cde52f7;hp=1fa8942f08bb61e275b59e98a3ce19f8f5dfc45c;hpb=3bd2acbd6ad7a2cae991ac9726d665e03dd84e05;p=rv32.git diff --git a/cpu_fetch_stage.py b/cpu_fetch_stage.py index 1fa8942..f3269fb 100644 --- a/cpu_fetch_stage.py +++ b/cpu_fetch_stage.py @@ -29,15 +29,13 @@ from migen.fhdl import verilog #from riscvdefs import * from cpudefs import * -reset_vector = 0x0 #32'hXXXXXXXX; -mtvec = 0x0 # 32'hXXXXXXXX; class CPUFetchStage(Module): def __init__(self): self.clk = ClockSignal() self.reset = ResetSignal() #output [31:2] memory_interface_fetch_address, - self.memory_interface_fetch_address = Signal(32)[2:] + self.memory_interface_fetch_address = Signal(32) #input [31:0] memory_interface_fetch_data, self.memory_interface_fetch_data = Signal(32) self.memory_interface_fetch_valid = Signal() @@ -47,6 +45,8 @@ class CPUFetchStage(Module): self.output_instruction = Signal(32) self.output_state = Signal(fetch_output_state, reset=fetch_output_state_empty) + self.reset_vector = Signal(32) #32'hXXXXXXXX; - parameter + self.mtvec = Signal(32) # 32'hXXXXXXXX; - parameter #self.comb += [ # self.cd_sys.clk.eq(self.clk), @@ -58,7 +58,7 @@ class CPUFetchStage(Module): self.sync += If(self.fetch_action != fetch_action_wait, self.output_pc.eq(fetch_pc)) - self.memory_interface_fetch_address = fetch_pc[2:] + self.comb += self.memory_interface_fetch_address.eq(fetch_pc[2:]) #initial output_pc <= reset_vector; #initial output_state <= `fetch_output_state_empty; @@ -67,7 +67,6 @@ class CPUFetchStage(Module): delayed_instruction_valid = Signal(reset=0) self.sync += delayed_instruction.eq(self.output_instruction) - self.sync += self.output_state.eq(fetch_output_state_empty) self.comb += If(delayed_instruction_valid, self.output_instruction.eq(delayed_instruction) @@ -111,15 +110,18 @@ class CPUFetchStage(Module): if __name__ == "__main__": example = CPUFetchStage() - memory_interface_fetch_address = Signal(32) + #memory_interface_fetch_address = Signal(32) print(verilog.convert(example, { #example.clk, #example.reset, - memory_interface_fetch_address, + example.memory_interface_fetch_address, example.memory_interface_fetch_data, example.memory_interface_fetch_valid, example.fetch_action, example.target_pc, example.output_pc, example.output_instruction, - example.output_state })) + example.output_state + example.reset_vector, + example.mtvec + }))