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

📄 encode.v.bak

📁 此代码可用modelsim进行仿真
💻 BAK
📖 第 1 页 / 共 2 页
字号:
/*****************************************//**        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 + -