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

📄 barrel.v

📁 这是arm7处理器的verilog全代码
💻 V
字号:
// Barrel Shifter with 32 bit input & 32 bit output `timescale 1ns/100psmodule Barrel_Shifter(BS_Enable,BS_Input_Bus,BS_Shift_Type,BS_Shift_Amt,BS_Cin,BS_Shift_Output,BS_Cout);input[31:0] BS_Input_Bus;input[4:0] BS_Shift_Amt;input[1:0] BS_Shift_Type;input BS_Enable;input BS_Cin;output BS_Cout;output[31:0] BS_Shift_Output;wire[31:0] BS_Input_Bus;wire[4:0] BS_Shift_Amt;wire[1:0] BS_Shift_Type;wire BS_Enable;wire BS_Cin;reg BS_Cout;reg[31:0] BS_Shift_Output;integer i; always @(BS_Enable or BS_Input_Bus or BS_Shift_Type or BS_Shift_Amt or BS_Cin)     begin   if (BS_Enable==1'b0)     begin               BS_Shift_Output[31:0]=BS_Input_Bus[31:0];       BS_Cout=BS_Cin;     end   else   if (BS_Enable==1'b1)                            //If shift needed     begin     case(BS_Shift_Type[1:0])                      //Case for Shift type       2'b00:begin                                  //LSL - Logical Shift Left         if (BS_Shift_Amt[4:0]==5'b00000)                      begin                                     //LSL#0 -special case              BS_Shift_Output[31:0]=BS_Input_Bus[31:0];           BS_Cout=BS_Cin;         end         else					   //Shift of nonzero bits          begin           for (i=0;i<=31;i=i + 1)                  //for each bit of output check the condition and assign a value              begin             if (BS_Shift_Amt[4:0] > i)            //Condition                  BS_Shift_Output[i]=1'b0;             else                  BS_Shift_Output[i]=BS_Input_Bus[i-BS_Shift_Amt[4:0]];                 end           BS_Cout=BS_Input_Bus[31-BS_Shift_Amt[4:0]+1];          end        end      2'b01:begin                                 //LSR - Logic Shift Right        if (BS_Shift_Amt[4:0]==5'b00000)          //LSR#0 -used to encode LSR#32          begin           BS_Shift_Output[31:0]=32'b00000000000000000000000000000000;           BS_Cout=BS_Input_Bus[31];         end         else                                      //Shift of nonzero bits           begin           for (i=0;i<=31;i=i+1)                   //for each bit of output check the condition and assign a value              begin             if (i > 31-BS_Shift_Amt[4:0])        //Condition                  BS_Shift_Output[i]=1'b0;             else                BS_Shift_Output[i]=BS_Input_Bus[i+BS_Shift_Amt[4:0]];               end           BS_Cout=BS_Input_Bus[BS_Shift_Amt[4:0]-1];           end        end      2'b10:begin                                //ASR - Arithmetic Shift Right        if (BS_Shift_Amt[4:0]==5'b00000)        //ASR#0 -used to encode ASR#32          begin           for (i=0;i<=31;i=i+1)           BS_Shift_Output[i]=BS_Input_Bus[31];           BS_Cout=BS_Input_Bus[31];         end        else  					 //Shift of nonzero bits          begin           for (i=0;i<=31;i=i+1)                  //for each bit of output check the condition and assign a value                begin             if (i > 31-BS_Shift_Amt[4:0])       //Condition                  BS_Shift_Output[i]=BS_Input_Bus[31];             else                 BS_Shift_Output[i]=BS_Input_Bus[i+BS_Shift_Amt[4:0]];           end           BS_Cout=BS_Input_Bus[BS_Shift_Amt[4:0]-1];               end        end      2'b11:begin                                //ROR - Rotate Right         if (BS_Shift_Amt[4:0]==5'b00000)         //Shift of Zero(RRX) - Special case         begin                                             for (i=0;i<=31;i=i+1)            if (i < 31)            BS_Shift_Output[i]=BS_Input_Bus[i+1];            else if (i==31)            BS_Shift_Output[i]=BS_Cin;            BS_Cout=BS_Input_Bus[0];         end        else                                     //Shift of nonzero bits             begin           for (i=0;i<=31;i=i+1)                  //for each bit of output check the condition and assign a value             begin             if (i > 31-BS_Shift_Amt[4:0])       //Condition                  BS_Shift_Output[i]=BS_Input_Bus[i-31+BS_Shift_Amt[4:0]-1];             else                 BS_Shift_Output[i]=BS_Input_Bus[i+BS_Shift_Amt[4:0]];             end           BS_Cout = BS_Input_Bus[BS_Shift_Amt[4:0]-1];              end        end      default:begin              end       endcase                                    // case(BS_Shift_Type[1:0])	     end                                        // if (BS_Enable==1'b1)   end                                          //always endmodule                                       //module  

⌨️ 快捷键说明

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