Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ข้อ1
  2.  
  3. module ALU(input logic [7:0] in1, in2, logic[3:0] func, output logic [7:0] out,logic zero,carry);
  4.   always_comb begin
  5.     carry = in2[7];
  6.     if(func == 3'b000) begin
  7.       {carry,out} = in1 + in2;
  8.     end else if(func == 3'b001) begin
  9.       {carry,out} = in1 - in2;
  10.     end else if(func == 3'b010)
  11.       out = in1 & in2;
  12.     else if(func == 3'b011)
  13.       out = in1 | in2;
  14.    
  15.     else if(func == 3'b100)
  16.       out = in1 ^ in2;
  17.     else if(func == 3'b101)
  18.       out = ~ in1 ;
  19.     else if(func == 3'b110) begin
  20.       out = in1 << 1;
  21.       out[0] = carry;
  22.       carry = in1[7];
  23.     end else if(func == 3'b111) begin
  24.       out = in1 >> 1;
  25.       out[7] = carry;
  26.       carry = in1[0];
  27.     end
  28.     if (out == 0)
  29.       zero = 1;
  30.     else
  31.       zero = 0;
  32.   end
  33. endmodule
  34.  
  35. ข้อ2
  36.  
  37. module REG8x8( input logic [2:0] o_addr1, o_addr2, w_addr, logic[7:0] D_in, logic RegW, output logic [7:0] D1, D2);
  38.   logic [7:0] mem [7:0];
  39.   always_comb begin
  40.     D1 = mem[o_addr1];
  41.     D2 = mem[o_addr2];
  42.   end
  43.  
  44.   always_ff @(negedge RegW) begin
  45.     mem[w_addr] = D_in;
  46.   end
  47.  
  48. endmodule
  49.  
  50. ข้อ3
  51.  
  52. module Path(input logic [7:0] B_addr, logic B,Update, output logic [7:0] PC_out);
  53.   logic [7:0] B_in,B_sel;
  54.   MUX m(.B(B),.B_addr(B_addr),.B_in(B_in),.B_sel(B_sel));
  55.   PC p(.Update(Update),.B_sel(B_sel),.PC_out(PC_out));
  56.   Increment i(.PC_out(PC_out),.B_in(B_in));
  57. endmodule
  58.  
  59. module MUX(input logic B,logic [7:0] B_addr, B_in, output logic [7:0] B_sel);
  60.   always_comb begin
  61.     if(B)
  62.       B_sel = B_addr;
  63.     else
  64.       B_sel = B_in;
  65.   end
  66. endmodule
  67.  
  68. module PC(input logic Update,logic[7:0] B_sel,output logic [7:0] PC_out);
  69.   always_ff @(posedge Update) begin
  70.       PC_out  = B_sel;
  71.   end
  72. endmodule
  73.  
  74. module Increment(input logic [7:0] PC_out, output logic [7:0] B_in);
  75.   always_comb begin
  76.     B_in = PC_out + 1;
  77.   end
  78. endmodule
  79.  
  80. ข้อ4
  81.  
  82. module Path(input logic [7:0] D_in, logic [2:0] Src_Addr1, Src_Addr2, Write_Addr, Func, logic RegWrite, Sel1, Sel3, logic [1:0] Sel2, output logic [7:0] D_out);
  83.   logic [7:0] D_1, D_o_1, D_o_2, D_2, D_ALU, D_Carry;
  84.   logic carry, zero;
  85.  
  86.   always_comb begin
  87.     D_Carry = zero;
  88.     D_Carry[7] = carry;
  89.     $display("D_ALU %d \t D_Carry  %d \t Out %d %d\t Func %d",D_ALU,D_Carry,D_2, D_o_1, Func);
  90.   end
  91.  
  92.   MUX1 M1(.sel(Sel1),.in0(D_out),.in1(D_in), .out(D_1));
  93.   REG8x8 R(.o_addr1(Src_Addr1), .o_addr2(Src_Addr2), .w_addr(Write_Addr), .D_in(D_1), .RegW(RegWrite), .D1(D_o_1), .D2(D_o_2));
  94.   MUX2 M2(.sel(Sel2),.in(D_o_2), .out(D_2));
  95.   ALU A(.in1(D_o_1), .in2(D_2), .func(Func), .out(D_ALU), .zero(zero), .carry(carry));
  96.   MUX1 M3(.sel(Sel3),.in0(D_Carry),.in1(D_ALU),.out(D_out));
  97.  
  98. endmodule
  99.  
  100. module MUX1(input logic sel,logic [7:0] in0, in1, output logic [7:0] out);
  101.   always_comb begin
  102.     if(sel)
  103.       out = in1;
  104.     else
  105.       out = in0;
  106.   end
  107. endmodule
  108.  
  109.  
  110. module ALU(input logic [7:0] in1, in2, logic[2:0] func, output logic [7:0] out,logic zero,carry);
  111.   always_comb begin
  112.     carry = in2[7];
  113.     zero = 0;
  114.     if(func == 3'b000) begin
  115.       {carry,out} = in1 + in2;
  116.       if(out == 0 && carry == 0)
  117.         zero = 1;
  118.     end else if(func == 3'b001) begin
  119.       {carry,out} = in1 - in2;
  120.       if(out == 0 && carry == 0)
  121.         zero = 1;
  122.     end else if(func == 3'b010)
  123.       out = in1 & in2;
  124.     else if(func == 3'b011)
  125.       out = in1 | in2;
  126.    
  127.    
  128.     else if(func == 3'b100)
  129.       out = in1 ^ in2;
  130.     else if(func == 3'b101)
  131.       out = ~ in1 ;
  132.     else if(func == 3'b110)
  133.       out = in1 << 1;
  134.     else if(func == 3'b111) begin
  135.       out = in1 >> 1;
  136.       out[7] = carry;
  137.     end
  138.   end
  139. endmodule
  140.  
  141. module MUX2(input logic [1:0] sel,logic [7:0] in, output logic [7:0] out);
  142.   always_comb begin
  143.     if(sel == 0)
  144.       out = 0'b10000000;
  145.     else if(sel == 1)
  146.       out = 0'b1;
  147.     else if(sel == 2)
  148.       out = 0'b0;
  149.     else if(sel == 3)
  150.       out = in;
  151.   end
  152. endmodule
  153.  
  154.  
  155. module REG8x8( input logic [2:0] o_addr1, o_addr2, w_addr, logic[7:0] D_in, logic RegW, output logic [7:0] D1, D2);
  156.   logic [7:0] mem [7:0];
  157.   always_comb begin
  158.     D1 = mem[o_addr1];
  159.     D2 = mem[o_addr2];
  160.   end
  161.  
  162.   always_ff @(negedge RegW) begin
  163.     mem[w_addr] = D_in;
  164.   end
  165.  
  166. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement