⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsm2_in.v

📁 Please read your package and describe it at least 40 bytes. System will automatically delete the di
💻 V
字号:
module fsm2_in(clock, reset, enter, halt, input1, output1);
input clock;
input reset;
input enter;
input [15:0]input1;
output halt;
reg halt;
output[15:0]output1;
reg [3:0]state;
reg[15:0]IR;
reg[4:0]PC;
reg[15:0]A;
reg[4:0]memory_address;
//define states
`define s_start 0
`define s_fetch 1
`define s_decode 2
`define s_load 3
`define s_add 4
`define s_sub 5
`define s_store 6
`define s_input 7
`define s_halt 15
assign output1 = A;
// Single Port ROM
parameter DATA_WIDTH = 16;
parameter ADDR_WIDTH = 5;

// Declare the ROM variable
	reg [DATA_WIDTH-1:0]memory_data[2**ADDR_WIDTH-1:0];
	/*initial
	begin
		$readmemb("Text1.txt", memory_data);
	end*/
//*********************************************
always @(posedge clock or posedge reset)
begin
if (reset) begin
			PC=5'b0;
			IR=16'b0;
			A=16'b0;
			halt=1'b0;
			$readmemb("Text1.txt", memory_data);
			state = `s_start;
			end
else 	begin
			case (state)
				`s_start: 
					begin
					memory_address = PC;
					state = `s_fetch;
					end
				`s_fetch:
					begin
					IR = memory_data[memory_address];
					PC = PC + 5'b1;
					state = `s_decode;
					end
				`s_decode:
					begin
					memory_address = IR[4:0];
					case (IR[15:12])
					4'b0000: state = `s_load;
					4'b0001: state = `s_add;
					4'b0010: state = `s_sub;
					4'b0011: state = `s_store;
					4'b0100: state = `s_input;
					4'b1111: state = `s_halt;
					default: state = `s_start;
					endcase
					end
				`s_load:
					begin
					A = memory_data[memory_address];
					state = `s_start;
					end
				`s_add:
					begin
					A = A + memory_data[memory_address];
					state = `s_start;
					end
				`s_sub:
					begin
					A = A - memory_data[memory_address];
					state = `s_start;
					end
				`s_store:
					begin
					memory_data[memory_address] = A;
					state = `s_start;
					end
				`s_input:
					begin
					A = input1;
					if (enter == 0) state = `s_input;
					else state = `s_start;
					end
				`s_halt:
					begin
					halt = 1'b1;
					state = `s_halt;
					end
				default:
					state = `s_halt;
			endcase
		end
end
endmodule 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -