亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mips.v

?? 《數字設計和計算機體系結構》一書MIPS verilog源碼。
?? V
字號:
//-------------------------------------------------------
// mips.v
// Max Yi (byyi@hmc.edu) and David_Harris@hmc.edu 12/9/03
// Model of subset of MIPS processor described in Ch 1
//-------------------------------------------------------

// top level design for testing
module top #(parameter WIDTH = 8, REGBITS = 3)();

   reg                 clk;
   reg                 reset;
   wire                memread, memwrite;
   wire    [WIDTH-1:0] adr, writedata;
   wire    [WIDTH-1:0] memdata;

   // instantiate devices to be tested
   mips #(WIDTH,REGBITS) dut(clk, reset, memdata, memread, memwrite, adr, writedata);

   // external memory for code and data
   exmemory #(WIDTH) exmem(clk, memwrite, adr, writedata, memdata);

   // initialize test
   initial
      begin
         reset <= 1; # 22; reset <= 0;
      end

   // generate clock to sequence tests
   always
      begin
         clk <= 1; # 5; clk <= 0; # 5;
      end

   always@(negedge clk)
      begin
         if(memwrite)
            if(adr == 5 & writedata == 7)
               $display("Simulation completely successful");
            else $display("Simulation failed");
      end
endmodule

// external memory accessed by MIPS
module exmemory #(parameter WIDTH = 8)
                 (clk, memwrite, adr, writedata, memdata);

   input                  clk;
   input                  memwrite;
   input      [WIDTH-1:0] adr, writedata;
   output reg [WIDTH-1:0] memdata;

   reg  [31:0] RAM [(1<<WIDTH-2)-1:0];
   wire [31:0] word;

   initial
      begin
         $readmemh("memfile.dat",RAM);
      end

   // read and write bytes from 32-bit word
   always @(posedge clk)
      if(memwrite) 
         case (adr[1:0])
            2'b00: RAM[adr>>2][7:0] <= writedata;
            2'b01: RAM[adr>>2][15:8] <= writedata;
            2'b10: RAM[adr>>2][23:16] <= writedata;
            2'b11: RAM[adr>>2][31:24] <= writedata;
         endcase

   assign word = RAM[adr>>2];
   always @(*)
      case (adr[1:0])
         2'b00: memdata <= word[31:24];
         2'b01: memdata <= word[23:16];
         2'b10: memdata <= word[15:8];
         2'b11: memdata <= word[7:0];
      endcase
endmodule

// simplified MIPS processor
module mips #(parameter WIDTH = 8, REGBITS = 3)
             (input              clk, reset, 
              input  [WIDTH-1:0] memdata, 
              output             memread, memwrite, 
              output [WIDTH-1:0] adr, writedata);

   wire [31:0] instr;
   wire        zero, alusrca, memtoreg, iord, pcen, regwrite, regdst;
   wire [1:0]  aluop,pcsource,alusrcb;
   wire [3:0]  irwrite;
   wire [2:0]  alucont;

   controller  cont(clk, reset, instr[31:26], zero, memread, memwrite, 
                    alusrca, memtoreg, iord, pcen, regwrite, regdst,
                    pcsource, alusrcb, aluop, irwrite);
   alucontrol  ac(aluop, instr[5:0], alucont);
   datapath    #(WIDTH, REGBITS) 
               dp(clk, reset, memdata, alusrca, memtoreg, iord, pcen,
                  regwrite, regdst, pcsource, alusrcb, irwrite, alucont,
                  zero, instr, adr, writedata);
endmodule

module controller(input clk, reset, 
                  input      [5:0] op, 
                  input            zero, 
                  output reg       memread, memwrite, alusrca, memtoreg, iord, 
                  output           pcen, 
                  output reg       regwrite, regdst, 
                  output reg [1:0] pcsource, alusrcb, aluop, 
                  output reg [3:0] irwrite);

   parameter   FETCH1  =  4'b0001;
   parameter   FETCH2  =  4'b0010;
   parameter   FETCH3  =  4'b0011;
   parameter   FETCH4  =  4'b0100;
   parameter   DECODE  =  4'b0101;
   parameter   MEMADR  =  4'b0110;
   parameter   LBRD    =  4'b0111;
   parameter   LBWR    =  4'b1000;
   parameter   SBWR    =  4'b1001;
   parameter   RTYPEEX =  4'b1010;
   parameter   RTYPEWR =  4'b1011;
   parameter   BEQEX   =  4'b1100;
   parameter   JEX     =  4'b1101;

   parameter   LB      =  6'b100000;
   parameter   SB      =  6'b101000;
   parameter   RTYPE   =  6'b0;
   parameter   BEQ     =  6'b000100;
   parameter   J       =  6'b000010;

   reg [3:0] state, nextstate;
   reg       pcwrite, pcwritecond;

   // state register
   always @(posedge clk)
      if(reset) state <= FETCH1;
      else state <= nextstate;

   // next state logic
   always @(*)
      begin
         case(state)
            FETCH1:  nextstate <= FETCH2;
            FETCH2:  nextstate <= FETCH3;
            FETCH3:  nextstate <= FETCH4;
            FETCH4:  nextstate <= DECODE;
            DECODE:  case(op)
                        LB:      nextstate <= MEMADR;
                        SB:      nextstate <= MEMADR;
                        RTYPE:   nextstate <= RTYPEEX;
                        BEQ:     nextstate <= BEQEX;
                        J:       nextstate <= JEX;
                        default: nextstate <= FETCH1; // should never happen
                     endcase
            MEMADR:  case(op)
                        LB:      nextstate <= LBRD;
                        SB:      nextstate <= SBWR;
                        default: nextstate <= FETCH1; // should never happen
                     endcase
            LBRD:    nextstate <= LBWR;
            LBWR:    nextstate <= FETCH1;
            SBWR:    nextstate <= FETCH1;
            RTYPEEX: nextstate <= RTYPEWR;
            RTYPEWR: nextstate <= FETCH1;
            BEQEX:   nextstate <= FETCH1;
            JEX:     nextstate <= FETCH1;
            default: nextstate <= FETCH1; // should never happen
         endcase
      end

   always @(*)
      begin
            // set all outputs to zero, then conditionally assert just the appropriate ones
            irwrite <= 4'b0000;
            pcwrite <= 0; pcwritecond <= 0;
            regwrite <= 0; regdst <= 0;
            memread <= 0; memwrite <= 0;
            alusrca <= 0; alusrcb <= 2'b00; aluop <= 2'b00;
            pcsource <= 2'b00;
            iord <= 0; memtoreg <= 0;
            case(state)
               FETCH1: 
                  begin
                     memread <= 1; 
                     irwrite <= 4'b1000; 
                     alusrcb <= 2'b01; 
                     pcwrite <= 1;
                  end
               FETCH2: 
                  begin
                     memread <= 1;
                     irwrite <= 4'b0100;
                     alusrcb <= 2'b01;
                     pcwrite <= 1;
                  end
               FETCH3:
                  begin
                     memread <= 1;
                     irwrite <= 4'b0010;
                     alusrcb <= 2'b01;
                     pcwrite <= 1;
                  end
               FETCH4:
                  begin
                     memread <= 1;
                     irwrite <= 4'b0001;
                     alusrcb <= 2'b01;
                     pcwrite <= 1;
                  end
               DECODE: alusrcb <= 2'b11;
               MEMADR:
                  begin
                     alusrca <= 1;
                     alusrcb <= 2'b10;
                  end
               LBRD:
                  begin
                     memread <= 1;
                     iord    <= 1;
                  end
               LBWR:
                  begin
                     regwrite <= 1;
                     memtoreg <= 1;
                  end
               SBWR:
                  begin
                     memwrite <= 1;
                     iord     <= 1;
                  end
               RTYPEEX: 
                  begin
                     alusrca <= 1;
                     aluop   <= 2'b10;
                  end
               RTYPEWR:
                  begin
                     regdst   <= 1;
                     regwrite <= 1;
                  end
               BEQEX:
                  begin
                     alusrca     <= 1;
                     aluop       <= 2'b01;
                     pcwritecond <= 1;
                     pcsource    <= 2'b01;
                  end
               JEX:
                  begin
                     pcwrite  <= 1;
                     pcsource <= 2'b10;
                  end
         endcase
      end
   assign pcen = pcwrite | (pcwritecond & zero); // program counter enable
endmodule

module alucontrol(input      [1:0] aluop, 
                  input      [5:0] funct, 
                  output reg [2:0] alucont);

   always @(*)
      case(aluop)
         2'b00: alucont <= 3'b010;  // add for lb/sb/addi
         2'b01: alucont <= 3'b110;  // sub (for beq)
         default: case(funct)       // R-Type instructions
                     6'b100000: alucont <= 3'b010; // add (for add)
                     6'b100010: alucont <= 3'b110; // subtract (for sub)
                     6'b100100: alucont <= 3'b000; // logical and (for and)
                     6'b100101: alucont <= 3'b001; // logical or (for or)
                     6'b101010: alucont <= 3'b111; // set on less (for slt)
                     default:   alucont <= 3'b101; // should never happen
                  endcase
      endcase
endmodule

module datapath #(parameter WIDTH = 8, REGBITS = 3)
                 (input              clk, reset, 
                  input  [WIDTH-1:0] memdata, 
                  input              alusrca, memtoreg, iord, pcen, regwrite, regdst,
                  input  [1:0]       pcsource, alusrcb, 
                  input  [3:0]       irwrite, 
                  input  [2:0]       alucont, 
                  output             zero, 
                  output [31:0]      instr, 
                  output [WIDTH-1:0] adr, writedata);

   // the size of the parameters must be changed to match the WIDTH parameter
   parameter CONST_ZERO = 8'b0;
   parameter CONST_ONE =  8'b1;

   wire [REGBITS-1:0] ra1, ra2, wa;
   wire [WIDTH-1:0]   pc, nextpc, md, rd1, rd2, wd, a, src1, src2, aluresult,
                          aluout, constx4;

   // shift left constant field by 2
   assign constx4 = {instr[WIDTH-3:0],2'b00};

   // register file address fields
   assign ra1 = instr[REGBITS+20:21];
   assign ra2 = instr[REGBITS+15:16];
   mux2       #(REGBITS) regmux(instr[REGBITS+15:16], instr[REGBITS+10:11], regdst, wa);

   // independent of bit width, load instruction into four 8-bit registers over four cycles
   flopen     #(8)      ir0(clk, irwrite[0], memdata[7:0], instr[7:0]);
   flopen     #(8)      ir1(clk, irwrite[1], memdata[7:0], instr[15:8]);
   flopen     #(8)      ir2(clk, irwrite[2], memdata[7:0], instr[23:16]);
   flopen     #(8)      ir3(clk, irwrite[3], memdata[7:0], instr[31:24]);

   // datapath
   flopenr    #(WIDTH)  pcreg(clk, reset, pcen, nextpc, pc);
   flop       #(WIDTH)  mdr(clk, memdata, md);
   flop       #(WIDTH)  areg(clk, rd1, a);	
   flop       #(WIDTH)  wrd(clk, rd2, writedata);
   flop       #(WIDTH)  res(clk, aluresult, aluout);
   mux2       #(WIDTH)  adrmux(pc, aluout, iord, adr);
   mux2       #(WIDTH)  src1mux(pc, a, alusrca, src1);
   mux4       #(WIDTH)  src2mux(writedata, CONST_ONE, instr[WIDTH-1:0], 
                                constx4, alusrcb, src2);
   mux4       #(WIDTH)  pcmux(aluresult, aluout, constx4, CONST_ZERO, pcsource, nextpc);
   mux2       #(WIDTH)  wdmux(aluout, md, memtoreg, wd);
   regfile    #(WIDTH,REGBITS) rf(clk, regwrite, ra1, ra2, wa, wd, rd1, rd2);
   alu        #(WIDTH) alunit(src1, src2, alucont, aluresult);
   zerodetect #(WIDTH) zd(aluresult, zero);
endmodule

module alu #(parameter WIDTH = 8)
            (input      [WIDTH-1:0] a, b, 
             input      [2:0]       alucont, 
             output reg [WIDTH-1:0] result);

   wire     [WIDTH-1:0] b2, sum, slt;

   assign b2 = alucont[2] ? ~b:b; 
   assign sum = a + b2 + alucont[2];
   // slt should be 1 if most significant bit of sum is 1
   assign slt = sum[WIDTH-1];

   always@(*)
      case(alucont[1:0])
         2'b00: result <= a & b;
         2'b01: result <= a | b;
         2'b10: result <= sum;
         2'b11: result <= slt;
      endcase
endmodule

module regfile #(parameter WIDTH = 8, REGBITS = 3)
                (input                clk, 
                 input                regwrite, 
                 input  [REGBITS-1:0] ra1, ra2, wa, 
                 input  [WIDTH-1:0]   wd, 
                 output [WIDTH-1:0]   rd1, rd2);

   reg  [WIDTH-1:0] RAM [(1<<REGBITS)-1:0];

   // three ported register file
   // read two ports combinationally
   // write third port on rising edge of clock
   // register 0 hardwired to 0
   always @(posedge clk)
      if (regwrite) RAM[wa] <= wd;	

   assign rd1 = ra1 ? RAM[ra1] : 0;
   assign rd2 = ra2 ? RAM[ra2] : 0;
endmodule

module zerodetect #(parameter WIDTH = 8)
                   (input [WIDTH-1:0] a, 
                    output            y);

   assign y = (a==0);
endmodule	

module flop #(parameter WIDTH = 8)
             (input                  clk, 
              input      [WIDTH-1:0] d, 
              output reg [WIDTH-1:0] q);

   always @(posedge clk)
      q <= d;
endmodule

module flopen #(parameter WIDTH = 8)
               (input                  clk, en,
                input      [WIDTH-1:0] d, 
                output reg [WIDTH-1:0] q);

   always @(posedge clk)
      if (en) q <= d;
endmodule

module flopenr #(parameter WIDTH = 8)
                (input                  clk, reset, en,
                 input      [WIDTH-1:0] d, 
                 output reg [WIDTH-1:0] q);
 
   always @(posedge clk)
      if      (reset) q <= 0;
      else if (en)    q <= d;
endmodule

module mux2 #(parameter WIDTH = 8)
             (input  [WIDTH-1:0] d0, d1, 
              input              s, 
              output [WIDTH-1:0] y);

   assign y = s ? d1 : d0; 
endmodule

module mux4 #(parameter WIDTH = 8)
             (input      [WIDTH-1:0] d0, d1, d2, d3,
              input      [1:0]       s, 
              output reg [WIDTH-1:0] y);

   always @(*)
      case(s)
         2'b00: y <= d0;
         2'b01: y <= d1;
         2'b10: y <= d2;
         2'b11: y <= d3;
      endcase
endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99久久久欧美国产| 欧美探花视频资源| 国产亚洲精品bt天堂精选| 视频一区国产视频| 欧美日韩国产一区二区三区地区| 亚洲人成精品久久久久| 91香蕉视频mp4| 亚洲www啪成人一区二区麻豆| 91丨九色丨尤物| 亚洲国产三级在线| 精品欧美久久久| 国产suv精品一区二区6| 一区二区三区不卡视频在线观看 | 在线观看免费一区| 午夜电影网一区| 久久婷婷国产综合精品青草| 成人在线综合网| 免费在线看成人av| 亚洲天堂av老司机| 日韩午夜电影av| 欧美专区亚洲专区| 高清不卡在线观看av| 亚洲电影激情视频网站| 欧美国产精品一区| 久久亚洲精华国产精华液| 在线免费观看一区| av不卡一区二区三区| 国产经典欧美精品| 日本欧美韩国一区三区| 亚洲精品亚洲人成人网在线播放| 久久久亚洲午夜电影| 91精品国产黑色紧身裤美女| 日本电影欧美片| 欧美亚洲综合色| 91久久线看在观草草青青| 波多野结衣91| 91福利在线播放| 91亚洲国产成人精品一区二三| 高清不卡一区二区| 97久久人人超碰| 色香蕉成人二区免费| 91美女在线视频| 欧美性大战久久| 精品国产一区二区三区久久久蜜月| 69堂成人精品免费视频| 日韩三级高清在线| 国产欧美日韩另类一区| 亚洲乱码日产精品bd| 日韩国产在线观看| 国产91丝袜在线播放九色| 91成人免费网站| 久久蜜桃香蕉精品一区二区三区| 久久综合色播五月| 综合久久一区二区三区| 亚洲成av人片在线| 99久久精品国产导航| 91精品综合久久久久久| 日本高清不卡aⅴ免费网站| 久久99精品久久久久久国产越南| 午夜久久福利影院| 国产成人av一区二区三区在线观看| 色先锋aa成人| 久久天天做天天爱综合色| 亚洲激情图片一区| 粉嫩欧美一区二区三区高清影视| 欧美高清视频不卡网| 日韩一区中文字幕| 成人av网站在线| 久久久91精品国产一区二区精品 | 国产日韩欧美一区二区三区乱码| 亚洲妇女屁股眼交7| 色哟哟欧美精品| 伊人开心综合网| 日本丶国产丶欧美色综合| 国产精品欧美一区喷水| 国产99久久精品| 欧美国产视频在线| 成人国产精品免费观看| 欧美激情在线一区二区| 成人精品gif动图一区| 国产精品久久久久影院亚瑟| 成人影视亚洲图片在线| 亚洲色图视频免费播放| 99国产精品久久久久久久久久久| 久久天天做天天爱综合色| 成人少妇影院yyyy| 亚洲国产日韩av| 精品国产一区二区三区av性色| 蜜臀av一级做a爰片久久| 久久夜色精品一区| 日本韩国欧美三级| 美女精品自拍一二三四| 99视频有精品| 国产不卡视频在线观看| 欧美精品一区二区三区高清aⅴ | 亚洲精品ww久久久久久p站| 欧美日韩亚洲另类| 国产精一区二区三区| 亚洲国产一区二区三区| 国产欧美视频在线观看| 欧美午夜片在线看| 不卡av免费在线观看| 免费高清不卡av| 午夜精品视频一区| 亚洲欧洲成人精品av97| 精品99一区二区| 欧美精品在线观看一区二区| av在线不卡电影| 国产一区不卡视频| 天堂av在线一区| 午夜精品久久久久久| 一区二区三区四区蜜桃| 亚洲欧美日韩一区| 国产精品久久毛片av大全日韩| 精品国产百合女同互慰| 91精品婷婷国产综合久久| 91精品国产综合久久精品性色| 在线中文字幕不卡| 在线播放欧美女士性生活| 在线观看日韩一区| 91在线丨porny丨国产| 99久久久久久99| 在线观看日韩一区| 91精品国产入口| 2023国产精华国产精品| 久久蜜桃av一区精品变态类天堂| 欧美日韩的一区二区| 51精品国自产在线| 精品剧情在线观看| 亚洲欧美电影一区二区| 亚洲一级不卡视频| 免费人成黄页网站在线一区二区| 另类小说视频一区二区| 成人午夜免费视频| 欧美区一区二区三区| 国产欧美精品一区二区三区四区 | 中文在线一区二区| 偷拍与自拍一区| 国产98色在线|日韩| 欧美日韩午夜在线| 国产欧美日韩不卡| 日本成人在线网站| 成人激情免费网站| 久久午夜电影网| 在线中文字幕一区| 欧美一区二区高清| 久久午夜电影网| 性欧美大战久久久久久久久| 久久超碰97中文字幕| 欧美性猛交xxxx乱大交退制版 | 精品久久一区二区三区| ㊣最新国产の精品bt伙计久久| 美女视频网站黄色亚洲| 在线播放亚洲一区| 日本成人在线看| 91精品国产一区二区人妖| 亚洲不卡在线观看| 色婷婷综合久久久中文一区二区 | 成+人+亚洲+综合天堂| 国产视频一区不卡| 国产iv一区二区三区| 欧美高清一级片在线观看| 国产精品99久久久| 亚洲欧美自拍偷拍| 91美女精品福利| 亚洲成a人片在线观看中文| 欧美日韩黄色影视| 另类欧美日韩国产在线| 久久久国产一区二区三区四区小说| 国产一区二区三区av电影| 久久精品一区二区三区四区| 懂色中文一区二区在线播放| 亚洲欧美影音先锋| 欧美精品aⅴ在线视频| 蜜桃91丨九色丨蝌蚪91桃色| 国产午夜精品久久久久久久| 99精品视频在线播放观看| 亚洲成人在线观看视频| 欧美大胆一级视频| 欧亚洲嫩模精品一区三区| 日本欧洲一区二区| 国产精品丝袜91| 91精品国产黑色紧身裤美女| 成人网男人的天堂| 日韩电影在线一区| 亚洲日本va午夜在线影院| 日韩精品专区在线| 91麻豆精品国产自产在线观看一区| 国产在线视视频有精品| 日韩电影在线观看网站| 亚洲乱码精品一二三四区日韩在线| 精品福利av导航| 欧美xxxx老人做受| 欧美一区午夜视频在线观看| 在线观看精品一区| 色婷婷精品大视频在线蜜桃视频| 国内外精品视频| 国产一本一道久久香蕉| 青青草国产精品亚洲专区无| 午夜视频在线观看一区|