?? encode.v.bak
字號:
/*****************************************//** 8bit RISC MCU desing **//** encode module **//** BY yuzhijie **//** 2006.10.22 **//*****************************************/`timescale 1ns/100psmodule encode(clk2,reset,encode,alu_z,alu_bitz,choice,sel_imm, sel_wd,load_pc,load_pc_call,load_pc_goto,load_pc_retlw, w_reg,r_reg,w_ena,ir_jump); //encode:ir reg's output //alu_z :judge the opcode is 0 or 1 //alu_z_b :bit operation is 0 or 1 //choice :what's operation of alu //sel_wd :select direct or indirect //sel_imm :select tmp2 is ram_out or literal //load_pc :pc ena //load_pc_call :call //load_pc_goto :goto //load_pc_retlw :retlw //w_reg :write of ram //r_reg :read of ram //w_ena :w ena //sel_win :select input data of w reg //ir_jump :jump instruction input clk2,reset,alu_z,alu_bitz;//alu_z,alu_bitz; input [11:0]encode; output sel_imm,sel_wd,load_pc,load_pc_call,ir_jump; output load_pc_goto,load_pc_retlw,w_reg,r_reg,w_ena; output [4:0]choice; reg [4:0]choice; reg sel_imm,sel_wd,load_pc,load_pc_call,ir_jump; reg load_pc_goto,load_pc_retlw,w_reg,r_reg,w_ena;always @(posedge clk2 or reset)begin if(reset) begin sel_imm<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; w_ena<=1'b0; ir_jump<=1'b0; choice<=5'bxxxxx; end else ctl_cycle;endtask ctl_cycle; begin casex(encode) 12'b0001_11??_????://ADDWF begin if(encode[5]==0) begin choice<=5'b00000; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end else if(encode[5]==1) begin choice<=5'b00000; sel_imm<=1'b1; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end end 12'b1100_????_????://MOVLW begin w_ena<=1'b1; sel_imm<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; choice<=5'b00001; end 12'b0001_01??_????://ANDWF begin if(encode[5]==0) begin choice<=5'b00010; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end else if(encode[5]==1) begin choice<=5'b00010; sel_imm<=1'b1; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end end 12'b0000_011?_????://CLRF begin choice<=5'b00011; sel_imm<=1'b0; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end 12'b0000_0100_0000://CLRW begin choice<=5'b00100; sel_imm<=1'b0; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end 12'b0001_00??_????://IORWF begin if(encode[5]==0) begin choice<=5'b00101; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end else if(encode[5]==1) begin choice<=5'b00101; sel_imm<=1'b1; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end end 12'b0010_00??_????://MOVF begin if(encode[5]==0) begin choice<=5'b00110; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b1; ir_jump<=1'b0; end else if(encode[5]==1) begin choice<=5'b00110; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b1; ir_jump<=1'b0; end end 12'b0000_001?_????://MOVWF begin choice<=5'b00111; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end 12'b0000_0000_0000://nop begin choice<=5'b01000; sel_imm<=1'b0; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end 12'b0011_01??_????://RLF begin if(encode[5]==0) begin choice<=5'b01001; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end else if(encode[5]==1) begin choice<=5'b01001; sel_imm<=1'b1; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end end 12'b0011_00??_????://RRF begin if(encode[5]==0) begin choice<=5'b01010; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end else if(encode==1) begin choice<=5'b01010; sel_imm<=1'b1; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end end 12'b0000_10??_????://SUBWF begin if(encode[5]==0) begin choice<=5'b01011; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end else if(encode[5]==1) begin choice<=5'b01011; sel_imm<=1'b1; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end end 12'b0011_10??_????://SWAPF begin if(encode[5]==0) begin choice<=5'b01100; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end else if(encode[5]==1) begin choice<=5'b01100; sel_imm<=1'b1; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end end 12'b0001_10??_????://XORWF begin if(encode[5]==0) begin choice<=5'b01101; sel_imm<=1'b1; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b0; r_reg<=1'b0; ir_jump<=1'b0; end else if(encode[5]==1) begin choice<=5'b01101; sel_imm<=1'b1; w_ena<=1'b0; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0; w_reg<=1'b1; r_reg<=1'b0; ir_jump<=1'b0; end end 12'b1110_????_????://ANDLW begin choice<=5'b01110; sel_imm<=1'b0; w_ena<=1'b1; sel_wd<=1'b0; load_pc<=1'b0; load_pc_call<=1'b0; load_pc_goto<=1'b0; load_pc_retlw<=1'b0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -