Advertisement
Guest User

Question 2

a guest
Sep 12th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // -------------------------------------------------------------------------------------
  2. // Question 2
  3. // -------------------------------------------------------------------------------------
  4. module  Question_2 #(parameter n = 8)
  5. (
  6.     // Inputs
  7.     input   logic   [17:0]      SW,                 // Switches
  8.     input   logic   [3:0]       KEY,                // Push Buttons
  9.     input   logic               CLOCK_27,           // Clock 27
  10.     input   logic               CLOCK_50,           // Clock 50
  11.    
  12.     // Outputs
  13.     output  logic   [6:0]       HEX0,               // SSD 0
  14.                                 HEX1,               // SSD 1
  15.                                 HEX2,               // SSD 2
  16.                                 HEX3,               // SSD 3
  17.                                 HEX4,               // SSD 4
  18.                                 HEX5,               // SSD 5
  19.                                 HEX6,               // SSD 6
  20.                                 HEX7,               // SSD 7
  21.     output  logic   [17:0]      LEDR,               // Red LEDS
  22.     output  logic   [8:0]       LEDG                // Green LEDS
  23.    
  24. );
  25.  
  26.     // Internal Logic
  27.     logic   [n-1:0]     A,
  28.                         B,
  29.                         B_prime,
  30.                         S,
  31.                         LO_AND_out,
  32.                         LO_OR_out,
  33.                         LO_XOR_out,
  34.                         LO_NOR_out,
  35.                         AU_out,
  36.                         LO_out,
  37.                         SLT_extn,
  38.                         ALU_out;
  39.     logic   [3:0]       F;
  40.     logic               AU_XNOR_out,
  41.                         AU_XOR_out,
  42.                         SLT_signed_out,
  43.                         SLT_unsigned_out,
  44.                         Cout,
  45.                         OVs,
  46.                         OVu,
  47.                         OV;
  48.    
  49.     // Assigning Numbers A, B and F to the switches and keys, respectively
  50.     assign A = SW[15:8];
  51.     assign B = SW[7:0];
  52.     assign F = KEY[3:0];
  53.    
  54.     // Displaying the inputs A and B on the Hex displays
  55.     disp_8b_SSD disp_A(A[n-1:0], HEX6[6:0], HEX7[6:0]);
  56.     disp_8b_SSD disp_B(B[n-1:0], HEX4[6:0], HEX5[6:0]);
  57.    
  58.     // ---- Arithmetic Unit ----
  59.    
  60.     // Choose between Add and Sub Mode
  61.     parameterized_2_1_MUX #(n) mux1(B[n-1:0], ~(B[n-1:0]), F[1], B_prime[n-1:0]);
  62.    
  63.     // Adding A and B' to get S and Cout
  64.     adder_8_bit(A[n-1:0], B_prime[n-1:0], F[1], S[n-1:0], Cout);
  65.     //{Cout, S[n-1:0]} = A[n-1:0] + B_prime[n-1:0] + F[1];
  66.    
  67.     // Top XNOR
  68.     assign AU_XNOR_out = ~(B_prime[n-1] ^ A[n-1]);
  69.    
  70.     // Top XOR
  71.     assign AU_XOR_out = A[n-1] ^ S[n-1];
  72.    
  73.     // OVs
  74.     assign OVs = AU_XNOR_out & AU_XOR_out;
  75.    
  76.     // OVu
  77.     assign OVu = Cout ^ F[1];
  78.    
  79.     // OV
  80.     parameterized_2_1_MUX #(n) mux2(OVs, OVu, F[0], OV);
  81.    
  82.     // Turning on LED is overflow is detected
  83.     assign LEDR[0] = OV;
  84.    
  85.     // ---- SLT Logic ----
  86.    
  87.     // SLT_signed_out
  88.     parameterized_2_1_MUX #(n) mux3(S[n-1], Cout, OVs, SLT_signed_out);
  89.    
  90.     // SLT_unsigned_out
  91.     parameterized_2_1_MUX #(n) mux4(SLT_signed_out, ~Cout, F[0], SLT_unsigned_out);
  92.    
  93.     // SLT_extn
  94.     assign SLT_extn[n-1:0] = {{(n-1){1'b0}}, SLT_unsigned_out};
  95.    
  96.     // AU_out
  97.     parameterized_2_1_MUX #(n) mux5(SLT_extn[n-1:0], S[n-1:0], ~F[2], AU_out[n-1:0]);
  98.    
  99.     // ---- Logic Operations ----
  100.    
  101.     // AND_out
  102.     assign LO_AND_out[n-1:0] = A[n-1:0] & B[n-1:0];
  103.    
  104.     // OR_out
  105.     assign LO_OR_out[n-1:0] = A[n-1:0] | B[n-1:0];
  106.    
  107.     // XOR_out
  108.     assign LO_XOR_out[n-1:0] = A[n-1:0] ^ B[n-1:0];
  109.    
  110.     // NOR_out
  111.     assign LO_NOR_out[n-1:0] = ~(A[n-1:0] | B[n-1:0]);
  112.    
  113.     // LO_out
  114.     parameterized_4_1_MUX #(n) mux6(LO_AND_out[n-1:0], LO_OR_out[n-1:0], LO_XOR_out[n-1:0], LO_NOR_out[n-1:0], F[1:0], LO_out[n-1:0]);
  115.    
  116.     // ---- Arithmetic Logic Unit ----
  117.    
  118.     // ALU_out
  119.     parameterized_2_1_MUX #(n) mux7(AU_out[n-1:0], LO_out[n-1:0], F[2], ALU_out[n-1:0]);
  120.    
  121.     // ---- Displaying the Result ----
  122.    
  123.     disp_equals_sign(HEX3[6:0]);
  124.     display_8b_with_Cout disp_ALU_out(ALU_out[n-1:0], Cout, HEX0[6:0], HEX1[6:0], HEX2[6:0]);
  125.    
  126. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement