Advertisement
GabryelM22

Todos os códigos em Verilog

Jun 27th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Todos os Códigos em Verilog
  2.  
  3. // Somador Binário de 2 Bits
  4.  
  5. module SomadorBinario2 (SW, LEDR);
  6.  
  7. input [3:0] SW;
  8.  
  9. output [2:0] LEDR;
  10.  
  11. wire A1, A0, B1, B0, S1, S0, C, Ci;
  12.  
  13. assign B0 = SW[0];
  14.  
  15. assign B1 = SW[1];
  16.  
  17. assign A0 = SW[2];
  18.  
  19. assign A1 = SW[3];
  20.  
  21. assign LEDR[0] = S0;
  22.  
  23. assign LEDR[1] = S1;
  24.  
  25. assign LEDR[2] = C;
  26.  
  27. SomadorCompleto U1(S0, Ci, A0, B0, 0);
  28.  
  29. SomadorCompleto U2(S1, C, A1, B1, Ci);
  30.  
  31. Endmodule
  32.  
  33. // Subtrator Binário de 2 Bits
  34.  
  35. module SubtratorBinario2 (SW, LEDR);
  36.  
  37. input [3:0] SW;
  38.  
  39. output [2:0] LEDR;
  40.  
  41. wire A1, A0, B1, B0, S1, S0, C, Ci;
  42.  
  43. assign B0 = SW[0];
  44.  
  45. assign B1 = SW[1];
  46.  
  47. assign A0 = SW[2];
  48.  
  49. assign A1 = SW[3];
  50.  
  51. assign LEDR[0] = S0;
  52.  
  53. assign LEDR[1] = S1;
  54.  
  55. assign LEDR[2] = C;
  56.  
  57. SubtratorCompleto U1(S0, Ci, A0, B0, 0);
  58.  
  59. SubtratorCompleto U2(S1, C, A1, B1, Ci);
  60.  
  61. endmodule
  62.  
  63. // Módulo SomadorCompleto
  64.  
  65. module SomadorCompleto (S, Co, A, B, Ci);
  66.  
  67. input A, B, Ci;
  68.  
  69. output S, Co;
  70.  
  71. wire x, y, z;
  72.  
  73. Porta_XOR U1(S, A, B, Ci);
  74.  
  75. Porta_AND U2(x, A, B, 1);
  76.  
  77. Porta_AND U3(y, A, Ci, 1);
  78.  
  79. Porta_AND U4(z, B, Ci, 1);
  80.  
  81. Porta_OR U5(Co, x, y, z);
  82.  
  83. endmodule
  84.  
  85. // Módulo SubtratorCompleto
  86.  
  87. module SubtratorCompleto (S, Co, A, B, Ci);
  88.  
  89. input A, B, Ci;
  90.  
  91. output S, Co;
  92.  
  93. wire x, y, z;
  94.  
  95. Porta_XOR U1(S, A, B, Ci);
  96.  
  97. Porta_AND U2(x, ~A, B, 1);
  98.  
  99. Porta_AND U3(y, ~A, Ci, 1);
  100.  
  101. Porta_AND U4(z, B, Ci, 1);
  102.  
  103. Porta_OR U5(Co, x, y, z);
  104.  
  105. endmodule
  106.  
  107. // Módulo Porta_AND
  108.  
  109. module Porta_AND(S, A, B, C);
  110.  
  111. input A, B, C;
  112.  
  113. output S;
  114.  
  115. assign S = A&B&C;
  116.  
  117. endmodule
  118.  
  119. // Módulo Porta_OR
  120.  
  121. module Porta_OR(S, A, B, C);
  122.  
  123. input A, B, C;
  124.  
  125. output S;
  126.  
  127. assign S = A | B | C;
  128.  
  129. endmodule
  130.  
  131. // Módulo Porta_XOR
  132.  
  133. module Porta_XOR(S, A, B, C);
  134.  
  135. input A, B, C;
  136.  
  137. output S;
  138.  
  139. assign S = A^B^C;
  140.  
  141. endmodule
  142.  
  143. // Módulo Somador/Subtrator de 2 bits
  144.  
  145. module Soma_Sub (SW, LEDR);
  146.  
  147. input [4:0] SW;
  148.  
  149. output [2:0] LEDR;
  150.  
  151. wire A1, A0, B1, B0, S1, S0, C, m, x, y, z, t, u, v;
  152.  
  153. assign B0 = SW[0];
  154.  
  155. assign B1 = SW[1];
  156.  
  157. assign A0 = SW[2];
  158.  
  159. assign A1 = SW[3];
  160.  
  161. assign m = SW[4]
  162.  
  163. assign LEDR[0] = S0;
  164.  
  165. assign LEDR[1] = S1;
  166.  
  167. assign LEDR[2] = C;
  168.  
  169. // Determinação de S0
  170.  
  171. Porta_XOR U1(S0, A0, B0, 0);
  172.  
  173. // Determinação de S1
  174.  
  175. Porta_XOR U2(x, A0, m, 0);
  176.  
  177. Porta_XOR U3(y, A1, m, 0);
  178.  
  179. Porta_AND U4(z, x, B0, 1);
  180.  
  181. Porta_XOR U5(S1, A1, B1, z);
  182.  
  183. // Determinação de C
  184.  
  185. Porta_AND U6(t, y, B1, 1);
  186.  
  187. Porta_AND U7(u, x, y, B0);
  188.  
  189. Porta_AND U8(v, x, B1, B0);
  190.  
  191. Porta_OR U9(C, t, u, v);
  192.  
  193. endmodule
  194.  
  195. //Módulo do Flip-Flop D
  196.  
  197. module FlipFlopD(Q, D, CK, CLR);
  198.  
  199. input D, CK, CLR;
  200.  
  201. output Q;
  202.  
  203. reg Q;
  204.  
  205. always @(negedge CK or negedge CLR)
  206.  
  207. begin
  208.  
  209. if(!CLR) Q = 0;
  210.  
  211. else Q = D;
  212.  
  213. end
  214.  
  215. endmodule
  216.  
  217. //Módulo do Flip-Flop JK
  218.  
  219. module FlipFlopJK(Q, J, K, CK, CLR);
  220.  
  221. input J, K, CK, CLR;
  222.  
  223. output Q;
  224.  
  225. reg Q;
  226.  
  227. always @(negedge CK or negedge CLR)
  228.  
  229. begin
  230.  
  231. if(!CLR) Q = 0;
  232.  
  233. else
  234.  
  235. begin
  236.  
  237. case ({J, K})
  238.  
  239. 0: Q = Q;
  240.  
  241. 1: Q = 0;
  242.  
  243. 2: Q = 1;
  244.  
  245. 3: Q = ~Q;
  246.  
  247. endcase
  248.  
  249. end
  250.  
  251. end
  252.  
  253. endmodule
  254.  
  255. //Módulo da porta NAND
  256.  
  257. module porta_NAND(S, A, B);
  258.  
  259. input A, B;
  260.  
  261. output S;
  262.  
  263. assign S = ~(A&B);
  264.  
  265. endmodule
  266.  
  267. // Registrador entrada paralela / saída serial de 4 bits
  268.  
  269. wire Q, E, CK, CLR;
  270.  
  271. wire[3:0] I, x;
  272.  
  273. wire [2:0] y;
  274.  
  275. assignI [3:0] = SW [3:0]
  276.  
  277. assignE = SW[4];
  278.  
  279. assign CLR = SW[5];
  280.  
  281. assign CK = CLOCK_27;
  282.  
  283. porta_NAND U0( x[3], I[3], E);
  284.  
  285. porta_NAND U1( x[2], I[2], E);
  286.  
  287. porta_NAND U2( x[1], I[1], E);
  288.  
  289. porta_NAND U3( x[0], I[0], E);
  290.  
  291. FlipFlopD_PR U4( y[2], 0, CK, CLR, x[3] );
  292.  
  293. FlipFlopD_PR U5( y[1], y[2], CK, CLR, x[2] );
  294.  
  295. FlipFlopD_PR U6( y[0], y[1], CK, CLR, x[1] );
  296.  
  297. FlipFlopD_PRU7(Q, y[0], CK, CLR, x[0] );
  298.  
  299. assign LEDR[0] = Q;
  300.  
  301. endmodule
  302.  
  303. //Módulo do Flip-Flop D com entrada PR
  304.  
  305. module FlipFlopD_PR(Q, D, CK, CLR, PR);
  306.  
  307. input D, CK, CLR, PR;
  308.  
  309. output Q;
  310.  
  311. reg Q;
  312.  
  313. always @(negedge CK or negedge CLR or negedge PR)
  314.  
  315. begin
  316.  
  317. if(!CLR) Q = 0;
  318.  
  319. else if(!PR) Q = 1;
  320.  
  321. else Q = D;
  322.  
  323. end
  324.  
  325. endmodule
  326.  
  327. // Registrador de deslocamento direita/esquerda de 4 bits
  328.  
  329. wire [3:0] q, x;
  330.  
  331. wire [1:0] y;
  332.  
  333. wire D, CK, CLR;
  334.  
  335. assign D = SW [0];
  336.  
  337. assign CLR = SW[1];
  338.  
  339. assign y[1:0] = SW[3:2];
  340.  
  341. assign CK = KEY[0];
  342.  
  343. MUX2x1 U3( x[3], D, q[2], y[1]);
  344.  
  345. FlipFlopD W3( q[3], x[3], CK, CLR);
  346.  
  347. MUX2x1 U2( x[2], D, q[1], q[3]);
  348.  
  349. FlipFlopD W2( q[2], x[2], CK, CLR);
  350.  
  351. MUX2x1 U1( x[1], D, q[0], q[2]);
  352.  
  353. FlipFlopD W1( q[1], x[1], CK, CLR);
  354.  
  355. MUX2x1 U0( x[0], D, y[0], q[1]);
  356.  
  357. FlipFlopD W0( q[0], x[0], CK, CLR);
  358.  
  359. assign LEDR [3:0] = q[3:0];
  360.  
  361. endmodule
  362.  
  363. //Módulo do MUX 2x1
  364.  
  365. module MUX2x1(S, D, I0, I1);
  366.  
  367. input I0, I1, D;
  368.  
  369. output S;
  370.  
  371. reg S;
  372.  
  373. always @( I0 or I1 or D)
  374.  
  375. begin
  376.  
  377. case(D)
  378.  
  379. 0: S = I0;
  380.  
  381. 1: S = I1;
  382.  
  383. endcase
  384.  
  385. end
  386.  
  387. endmodule
  388.  
  389. // Contador gray síncrono modulo 6 decrescente
  390.  
  391. wire CK, CLR;
  392.  
  393. wire [2:0] A, J, K;
  394.  
  395. assign CLR = SW[0];
  396.  
  397. assign CK = KEY[0];
  398.  
  399. assign K[2] = ~A[0];
  400.  
  401. assign J[1] = ~A[0];
  402.  
  403. assign J[0] = ~A[2];
  404.  
  405. porta_AND U1(J[2], ~A[1], ~A[0]);
  406.  
  407. porta_AND U2(K[1], ~A[2], A[0]);
  408.  
  409. porta_OR U3(K[0], ~A[1], A[2]);
  410.  
  411. FlipFlop_JK W2(A[2], CK, CLR, J[2], K[2]);
  412.  
  413. FlipFlop_JK W1(A[1], CK, CLR, J[1], K[1]);
  414.  
  415. FlipFlop_JK W0(A[0], CK, CLR, J[0], K[0]);
  416.  
  417. assign LEDR[2:0] = A[2:0];
  418.  
  419. endmodule
  420.  
  421. // Contador Johnson modificado de 4 bits
  422.  
  423. wire CK, CLR, x, y;
  424.  
  425. wire [3:0] A, J, K;
  426.  
  427. assign CLR = SW[0];
  428.  
  429. assign CK = KEY[0];
  430.  
  431. assign J[2] = A[3];
  432.  
  433. assign K[2] = ~A[3];
  434.  
  435. assign J[1] = A[2];
  436.  
  437. assign K[1] = ~A[2];
  438.  
  439. assign J[0] = A[1];
  440.  
  441. assign K[0] = ~A[1];
  442.  
  443. porta_OR U1(x, ~A[2], ~A[1]);
  444.  
  445. porta_AND U2(J[3], x, ~A[0]);
  446.  
  447. porta_OR U3(y, A[2], A[1]);
  448.  
  449. porta_AND U4(K[3], y, A[0]);
  450.  
  451. FlipFlop_JK W3(A[3], CK, CLR, J[3], K[3]);
  452.  
  453. FlipFlop_JK W2(A[2], CK, CLR, J[2], K[2]);
  454.  
  455. FlipFlop_JK W1(A[1], CK, CLR, J[1], K[1]);
  456.  
  457. FlipFlop_JK W0(A[0], CK, CLR, J[0], K[0]);
  458.  
  459. assign LEDR[3:0] = A[3:0];
  460.  
  461. endmodule
  462.  
  463. //Contador síncrono em anel 4 de bits
  464.  
  465. wire CK, CLR, S;
  466.  
  467. wire [3:0]Y, D;
  468.  
  469. wire [0:3]Q;
  470.  
  471. assign Y[3:0] = SW[3:0];
  472.  
  473. assign S = SW[4];
  474.  
  475. assign CLR = SW[5];
  476.  
  477. assign CK = KEY[0];
  478.  
  479. mux21 U0(Y[0], Q[3], S, D[0]);
  480.  
  481. mux21 U1(Y[1], Q[0], S, D[1]);
  482.  
  483. mux21 U2(Y[2], Q[1], S, D[2]);
  484.  
  485. mux21 U3(Y[3], Q[2], S, D[3]);
  486.  
  487. FlipFlop_D W0(Q[0], CK, CLR, D[0]);
  488.  
  489. FlipFlop_D W1(Q[1], CK, CLR, D[1]);
  490.  
  491. FlipFlop_D W2(Q[2], CK, CLR, D[2]);
  492.  
  493. FlipFlop_D W3(Q[3], CK, CLR, D[3]);
  494.  
  495. assign LEDR[3:0] = Q[0:3];
  496.  
  497. endmodule
  498.  
  499. // Contador assíncrono módulo 8 crescente/decrescente
  500.  
  501. wire CK, CLR, C;
  502.  
  503. wire [2:0]Q;
  504.  
  505. assign C = SW[0];
  506.  
  507. assign CLR = SW[1];
  508.  
  509. assign CK = KEY[0];
  510.  
  511. mux21 U0(x, Q[0], ~Q[0], C);
  512.  
  513. mux21 U1(y, Q[1], ~Q[1], C);
  514.  
  515. FlipFlop_T W0(Q[0], CK, CLR, 1);
  516.  
  517. FlipFlop_T W1(Q[1], x, CLR, 1);
  518.  
  519. FlipFlop_T W2(Q[2], y, CLR, 1);
  520.  
  521. assign LEDR[2:0] = Q[2:0];
  522.  
  523. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement