Advertisement
icatalin

CN LAB 4

Mar 14th, 2019
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // online compiler: https://www.tutorialspoint.com/compile_verilog_online.php
  2. // decoder_2x4.v
  3. `timescale 1ns / 1ps
  4.  
  5. module Decoder(A, B, D);
  6.  
  7.   input A, B;
  8.   output [3:0] D;
  9.   reg [3:0] D;
  10.  
  11.   always @ (A or B)
  12.     begin
  13.       if ( A == 0 && B == 0)
  14.         D <= 4'b0001;
  15.      
  16.       else if ( A == 0 && B == 1)
  17.         D <= 4'b0010;
  18.      
  19.       else if ( A == 1 && B == 0)
  20.         D <= 4'0100;
  21.      
  22.       else
  23.         D <= 4'b1000;
  24.     end
  25.  
  26. endmodule
  27.  
  28. module Testbench;
  29.  
  30.   reg A_t, B_t;
  31.   wire [3:0] D_t;
  32.  
  33.   Decoder Decoder_1(A_t, B_t, D_t);
  34.  
  35.   initial
  36.     begin
  37.      
  38.       //case 0
  39.       A_t <= 0; B_t <= 0;
  40.       #1 $display("D_t = %b", D_t);
  41.      
  42.       //case 1
  43.       A_t <= 0; B_t <= 1;
  44.       #1 $display("D_t = %b", D_t);
  45.      
  46.       //case 2
  47.       A_t <= 1; B_t <= 0;
  48.       #1 $display("D_t = %b", D_t);
  49.      
  50.       //case 3
  51.       #1 $display("D_t = %b", D_t);
  52.      
  53.     end
  54. endmodule
  55.  
  56. //multiplier_4x4.v
  57.  
  58.  
  59. `timescale 1ns / 1ps
  60.  
  61. module Multiplier(A, B, Result);
  62.  
  63.     input [3:0] A;
  64.     input [3:0] B;
  65.     output [7:0] Result;
  66.     reg [7:0] Result;
  67.  
  68.     always @ (A or B)
  69.     begin
  70.         Result <= A * B;
  71.     end
  72.    
  73.     endmodule
  74.    
  75. module Testbench;
  76.  
  77.     reg [3:0] A_t;
  78.     reg [3:0] B_t;
  79.     wire [7:0] Result_t;
  80.    
  81.     Multiplier Multiplier_1(A_t, B_t, Result_t);
  82.    
  83.     initial
  84.     begin
  85.    
  86.         //case 0
  87.         A_t <= 0; B_t <= 0;
  88.         #1 $display("Result_t = %b", Result_t);
  89.        
  90.         //case 1
  91.         A_t <= 0; B_t <= 4;
  92.         #1 $display("Result_t = %b", Result_t);
  93.        
  94.         //case 2
  95.         A_t <= 2; B_t <= 4;
  96.         #1 $display("Result_t = %b", Result_t);
  97.        
  98.         //case 3
  99.         A_t <= 11; B_t <= 3;
  100.         #1 $display("Result_t = %b", Result_t);
  101.        
  102.     end
  103. endmodule
  104.  
  105. ///half_adder.v
  106.  
  107. module XOR (A,B,S);
  108.         input A, B;
  109.         output reg S;
  110.        
  111.         always @ (A or B)
  112.         begin
  113.             S=A^B;
  114.         end
  115. endmodule
  116.  
  117. module AND(A, B, S);
  118.         input A, B;
  119.         output reg S;
  120.        
  121.         always @(A or B)
  122.         begin
  123.             S=A&B;
  124.         end
  125. endmodule
  126.  
  127. module half_adder;
  128.  
  129.     reg A,B;
  130.     output S, C;
  131.    
  132.     XOR myXOR(A, B, S);
  133.     AND myAND(A, B, C);
  134.    
  135.     initial
  136.     begin
  137.         A = 0;
  138.         B = 0;
  139.         #1 $display ("S=%b, C=%b\n",S,C);
  140.        
  141.         A = 0;
  142.         B = 1;
  143.         #1 $display ("S=%b, C=%b\n", S,C);
  144.        
  145.         A = 1;
  146.         B = 0;
  147.         #1 $display ("S=%b, C=%b\n", S,C);
  148.        
  149.         A = 1;
  150.         B = 1;
  151.         #1 $display("S=%b, C=%b\n", S,C);
  152.         end
  153. endmodule
  154.  
  155. //full_adder_nand_gates.v
  156.  
  157. module NANDgate(A,B,C);
  158.  
  159. input A;
  160. input B;
  161. output C;
  162. reg C;
  163.  
  164. always @ (A or B)
  165. begin
  166.     C~(A & B);
  167. end
  168.  
  169. endmodule
  170.  
  171. module testbench;
  172.  
  173. reg A_t, B_t, C_in;
  174. output S, C_out;
  175. wire w1,w2,w3,w4,w5,w6,w7;
  176.  
  177. NANDgate my_nand_1(A_t, B_t, w1);
  178. NANDgate my_nand_2(A_t, w1, w2);
  179. NANDgate my_nand_3(w1, B_t, w3);
  180. NANDgate my_nand_4(w2, w3, w4);
  181. NANDgate my_nand_5(C_in, w4, w5);
  182. NANDgate my_nand_6(C_in, w5, w6);
  183. NANDgate my_nand_7(w5, w4, w7);
  184. NANDgate my_nand_8(w5, w1, C_out);
  185. NANDgate my_nand_9(w6, w7, 5);
  186.  
  187. initial
  188. begin
  189.  
  190. A_t = 0;
  191. B_t = 0;
  192. C_in = 0;
  193. #1 $display ("S=%b, C=%b\n",S,C_out);
  194.  
  195. A_t = 1;
  196. B_t = 0;
  197. C_in = 0;
  198. #1 $display("S=%b, C=%b\n", S, C_out);
  199.  
  200. A_t = 1;
  201. B_t = 1;
  202. C_in = 0;
  203. #1 $display("S=%b, C=%b\n", S,C_out);
  204.  
  205. end
  206.  
  207. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement