Advertisement
kekellner

Lab10 - Ej01 - Código y Testbench

Nov 8th, 2021
2,060
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module decode (
  2.               input phase, C, Z,
  3.               input [3:0] i,
  4.               output [12:0] out_data);
  5.  
  6.   wire [6:0] in = {i, C, Z, phase};
  7.   reg [12:0] out;
  8.  
  9.   always @ (in)
  10.     begin
  11.       casex(in)
  12.         7'b??????0: // any
  13.           out <= 13'b1000000001000;
  14.         7'b00001?1: // JC, C=1
  15.           out <= 13'b0100000001000;
  16.         7'b00000?1: // JC, C=0
  17.           out <= 13'b1000000001000;
  18.         7'b00011?1: // JNC, C=1
  19.           out <= 13'b1000000001000;
  20.         7'b00010?1: // JNC, C=0
  21.           out <= 13'b0100000001000;
  22.         7'b0010??1: // CMPI
  23.           out <= 13'b0001001000010;
  24.         7'b0011??1: // CMPM
  25.           out <= 13'b1001001100000;
  26.         7'b0100??1: // LIT
  27.           out <= 13'b0011010000010;
  28.         7'b0101??1: // IN
  29.           out <= 13'b0011010000100;
  30.         7'b0110??1: // LD
  31.           out <= 13'b1011010100000;
  32.         7'b0111??1: // ST
  33.           out <= 13'b1000000111000;
  34.         7'b1000?11: // JZ, Z = 1
  35.           out <= 13'b0100000001000;
  36.         7'b1000?01: // JZ, Z = 0
  37.           out <= 13'b1000000001000;
  38.         7'b1001?11: // JNZ, Z = 1
  39.           out <= 13'b1000000001000;
  40.         7'b1001?01: // JNZ, Z = 0
  41.           out <= 13'b0100000001000;
  42.         7'b1010??1: // ADDI
  43.           out <= 13'b0011011000010;
  44.         7'b1011??1: // ADDM
  45.           out <= 13'b1011011100000;
  46.         7'b1100??1: // JMP
  47.           out <= 13'b0100000001000;
  48.         7'b1101??1: // OUT
  49.           out <= 13'b0000000001001;
  50.         7'b1110??1: // NORI
  51.           out <= 13'b0011100000010;
  52.         7'b1111??1: // NORM
  53.           out <= 13'b1011100100000;
  54.         default:
  55.           out <= 13'b0101010101010;
  56.       endcase
  57.     end
  58.  
  59.     assign out_data = out;
  60. endmodule
  61.  
  62.  
  63. module testbench();
  64.     reg phase, C, Z;
  65.     reg [3:0] i;
  66.     reg [6:0] test;
  67.     wire [12:0] code;
  68.  
  69.     wire [6:0] in;
  70.  
  71.     assign in = {i, C, Z, phase}; // Esta asignación sirve para que el $monitor pueda tomar sólo 1 variable de entrada (en este caso 'in')
  72.  
  73.     decode dc(.phase(phase), .C(C), .Z(Z), .i(i), .out_data(code));
  74.  
  75.     initial begin
  76.         $display("phase = 0;");
  77.         phase = 0; C = 1; Z = 0; i = 4'b1010; // phase = 0
  78.         $monitor("Input: %b Output: %b", in, code);
  79.         #1
  80.         $display("JC con C = 1");
  81.         i = 4'b0000; C = 1; Z = 0; phase = 1;
  82.         #1
  83.         $display("JC con C = 0");
  84.         i = 4'b0000; C = 0; Z = 0; phase = 1;
  85.         #1
  86.         $display("JNC con C = 0");
  87.         i = 4'b0001; C = 0; Z = 0; phase = 1;
  88.         #1
  89.         $display("JNC con C = 1");
  90.         i = 4'b0001; C = 1; Z = 0; phase = 1;
  91.         #1
  92.         $display("CMPI");
  93.         i = 4'b0010; C = 1; Z = 0; phase = 1;
  94.         #1
  95.         $display("CMPM");
  96.         i = 4'b0011; C = 1; Z = 0; phase = 1;
  97.         #1
  98.         $display("LIT");
  99.         i = 4'b0100; C = 1; Z = 0; phase = 1;
  100.         #1
  101.         $display("IN");
  102.         i = 4'b0101; C = 1; Z = 0; phase = 1;
  103.         #1
  104.         $display("LD");
  105.         i = 4'b0110; C = 1; Z = 0; phase = 1;
  106.         #1
  107.         $display("ST");
  108.         i = 4'b0111; C = 1; Z = 0; phase = 1;
  109.         #1
  110.         $display("JZ con Z = 1");
  111.         i = 4'b1000; C = 0; Z = 1; phase = 1;
  112.         #1
  113.         $display("JZ con Z = 0");
  114.         i = 4'b1000; C = 0; Z = 0; phase = 1;
  115.         #1
  116.         $display("JNZ con Z = 1");
  117.         i = 4'b1001; C = 0; Z = 1; phase = 1;
  118.         #1
  119.         $display("JNZ con Z = 0");
  120.         i = 4'b1001; C = 0; Z = 0; phase = 1;
  121.         #1
  122.         $display("ADDI");
  123.         i = 4'b1010; C = 0; Z = 0; phase = 1;
  124.         #1
  125.         $display("ADDM");
  126.         i = 4'b1011; C = 1; Z = 0; phase = 1;
  127.         #1
  128.         $display("JMP");
  129.         i = 4'b1100; C = 1; Z = 1; phase = 1;
  130.         #1
  131.         $display("OUT");
  132.         i = 4'b1101; C = 1; Z = 0; phase = 1;
  133.         #1
  134.         $display("NANDI");
  135.         i = 4'b1110; C = 0; Z = 0; phase = 1;
  136.         #1
  137.         $display("NANDM");
  138.         i = 4'b1111; C = 0; Z = 0; phase = 1;
  139.     end
  140.  
  141. endmodule
  142.  
  143.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement