Facebook
From PAUL, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 73
  1. module test_1(
  2.         input[15:0] a,b,
  3.         input[0:0] c_en,sel_en,h_ab,h_sel,gate_en,
  4.         output reg[0:0] gt_lo_eq,
  5.         output reg[7:0] h_out,
  6.         output reg[31:0] err_out,
  7.         output reg[2:0] sum_2a,
  8.         output reg[15:0] rsr_b,out_xor
  9.                 );
  10.  
  11. integer i,j;
  12.  
  13. initial begin
  14.  
  15.         gt_lo_eq = 1'b0;
  16.         sum_2a = 3'b000;
  17.         h_out = 7'b0000000;
  18.  
  19.         for (i=0; i<16; i=i+1) begin
  20.         rsr_b[i] = 1'b0;
  21.         out_xor[i] = 1'b0;
  22.         end
  23.         for (i=0; i<32; i=i+1) begin
  24.         err_out[i] = 1'b0;
  25.         end
  26.  
  27. end
  28.  
  29. always @(c_en, sel_en, gate_en)  begin
  30.  
  31.         if(c_en == 1 && sel_en == 1 && gate_en == 1)
  32.         begin
  33.         for(i=0; i<32; i=i+1)
  34.         err_out[i] = 1'b1;
  35.         end
  36.  
  37.         else begin
  38.                 for (i=0; i<32; i=i+1)
  39.                 err_out[i] = 1'b0;
  40.  
  41.                 if (c_en == 1)
  42.                 begin
  43.                         if(a > b)
  44.                         begin
  45.                         gt_lo_eq = 1'b0;
  46.                         end
  47.  
  48.                         else if(a<b)
  49.                         begin
  50.                         gt_lo_eq = ~(1'b0);
  51.                         end
  52.  
  53.                         else
  54.                         begin
  55.                         gt_lo_eq = ~gt_lo_eq;
  56.                         end
  57.                 end
  58.         end
  59.  
  60.         if (sel_en == 1)
  61.         begin
  62.                 if(h_ab == 0 && h_sel == 0)
  63.                 begin
  64.                         h_out = a[15:8];
  65.                 end
  66.  
  67.                 else if (h_ab == 0 && h_sel == 1)
  68.                 begin
  69.                         h_out = a[7:0];
  70.                 end
  71.                
  72.                 else if (h_ab == 1 && h_sel == 0)
  73.                 begin
  74.                         h_out = b[15:8];
  75.                 end
  76.                
  77.                 else if (h_ab == 1 && h_sel == 1)
  78.                 begin
  79.                         h_out = b[7:0];
  80.                 end
  81.         end
  82.  
  83.         if(gate_en == 1)
  84.                 begin
  85.                 i = &b;
  86.                
  87.                 for(j=0;j<16;j=j+1)
  88.                 out_xor[j] = a[j] ^ i;
  89.  
  90.                 end
  91. end
  92.         always@(*) begin
  93.  
  94.         sum_2a = 3'b000;
  95.  
  96.         for(i=0; i<=15; i = i+2)
  97.         begin
  98.                 sum_2a = sum_2a + a[i];
  99.         end
  100.        
  101.         rsr_b[15:12] = b[3:0];
  102.         rsr_b[11:0] = b[11:0];
  103.  
  104.         if(gate_en == 1)
  105.                 begin
  106.                 i = &b;
  107.                
  108.                 for(j=0;j<16;j=j+1)
  109.                 out_xor = a[j] ^ i;
  110.  
  111.                 end
  112. end
  113.  
  114. endmodule
  115.  
  116.  
  117.  
  118. TESTBENCH:
  119.  
  120. module test_1_tb;
  121.         reg[15:0] a_tb,b_tb;
  122.         reg[0:0] c_en_tb,sel_en_tb,h_ab_tb,h_sel_tb,gate_en_tb;
  123.         wire[0:0] gt_lo_eq_tb;
  124.         wire[7:0] h_out_tb;
  125.         wire[31:0] err_out_tb;
  126.         wire[2:0] sum_2a_tb;
  127.         wire[15:0] rsr_b_tb,out_xor_tb;
  128.  
  129. test_1 testbench(
  130.         .a(a_tb),
  131.         .b(b_tb),
  132.         .c_en(c_en_tb),
  133.         .sel_en(sel_en_tb),
  134.         .h_ab(h_ab_tb),
  135.         .h_sel(h_sel_tb),
  136.         .gate_en(gate_en_tb),
  137.         .gt_lo_eq(gt_lo_eq_tb),
  138.         .h_out(h_out_tb),
  139.         .err_out(err_out_tb),
  140.         .sum_2a(sum_2a_tb),
  141.         .rsr_b(rsr_b_tb),
  142.         .out_xor(out_xor_tb)
  143.         );
  144.  
  145. initial begin
  146. //Testeaza aici
  147.  
  148.         c_en_tb = 1'b0;
  149.         sel_en_tb = 1'b1;
  150.         gate_en_tb = 1'b1;
  151.         h_ab_tb = 1'b0;
  152.         h_sel_tb = 1'b0;
  153.         a_tb = 16'b1111111111111111;
  154.         b_tb = 16'b0110000000000001;
  155.  
  156. end
  157.  
  158.  
  159. initial begin
  160.         $monitor("Pentru a=%b, b=%b c_en = %b, sel_en =%b s gate_en = %b obtinem: gt_lo_eq = %b, h_out = %b, sum_2a = %b, rsr_b = %b, out_xor = %b, err_out = %b",
  161.         a_tb, b_tb, c_en_tb, sel_en_tb, gate_en_tb, gt_lo_eq_tb, h_out_tb, sum_2a_tb, rsr_b_tb, out_xor_tb, err_out_tb);
  162.  
  163. end
  164. endmodule