Advertisement
Geovanny

Tanque Hidroneumático en Verilog

Dec 31st, 2012
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module tanque(HB1_0, HB2_0, HC_0,YPB,YPRS,YTLL,HB1, HB2, HC);
  2. input HB1_0, HB2_0, HC_0, YPB, YPRS, YTLL;
  3. output HB1,HB2, HC;
  4.  
  5. //assign HB1 = (~HB1_0 & ~HC_0 & YPRS & ~YTLL) | (~HB1_0 & YPB & ~YTLL) | (YPB & YPRS & ~YTLL) | (~HB1_0 & HB2_0 & YPRS & ~YTLL) | (HB1_0 & HB2_0 & HC_0 & YPB & YPRS);
  6. //assign HB2 = (~HB1_0 & ~HB2_0 & ~HC_0 & YPB & YPRS) | (HB2_0 & ~HC_0 & YPRS & ~YTLL) | (HB2_0 & YPB & YPRS & ~YTLL) | (HB1_0 & YPRS & ~YTLL) | (HB1_0 & YPB & ~YTLL) | (HB1_0 & HB2_0 & HC_0 & YPB & YPRS);
  7. //assign HC = (YPB & YTLL);
  8.  
  9. assign HB1 = (~HB1_0 & ~HC_0 & ~YPB & YPRS & ~YTLL) | (~HB1_0 & YPB & ~YPRS & ~YTLL) | (~HB1_0 & HB2_0 & ~YPB & YPRS & ~YTLL);
  10. assign HB2 = (HB2_0 & ~HC_0 & ~YPB & YPRS & ~YTLL) | (HB1_0 & ~YPB & YPRS & ~YTLL) | (HB1_0 & YPB & ~YPRS & ~YTLL);
  11. assign HC = (YPB & ~YPRS & YTLL);
  12.  
  13. endmodule
  14.  
  15. ///////////////////////////////////////////////////////////////////////////////////////////////////
  16.  
  17. module flip_flop_d(CLK, D, Q);
  18.  
  19.     input CLK, D;
  20.     output Q;
  21.    
  22.     reg Q, temp;
  23.  
  24.     always @ (posedge CLK)begin
  25.         temp = D;
  26.         Q = temp;
  27.     end
  28.  
  29. endmodule
  30.  
  31.  
  32.  
  33. ///////////////////////////////////////////////////////////////////////////////////////////////////
  34.  
  35. module flip_flop_d2(CLK, D2, Q2);
  36.  
  37.     input CLK, D2;
  38.     output Q2;
  39.    
  40.     reg Q2, temp2;
  41.  
  42.     always @ (posedge CLK)begin
  43.         temp2 = D2;
  44.         Q2 = temp2;
  45.     end
  46.  
  47. endmodule
  48.  
  49.  
  50.  
  51. ///////////////////////////////////////////////////////////////////////////////////////////////////
  52. module flip_flop_d3(CLK, D3, Q3);
  53.  
  54.     input CLK, D3;
  55.     output Q3;
  56.    
  57.     reg Q3, temp3;
  58.  
  59.     always @ (posedge CLK)begin
  60.         temp3 = D3;
  61.         Q3 = temp3;
  62.     end
  63.  
  64. endmodule
  65.  
  66.  
  67.  
  68. ///////////////////////////////////////////////////////////////////////////////////////////////////
  69.  
  70. module test(); //En un archivo test-and. Fïjese que no tiene entradas ni salidas. Es una caja negra que envuelve el módulo
  71.  
  72. reg HB1_0, HB2_0, HC_0, YPB, YPRS, YTLL; // Entradas
  73.  
  74. wire HB1_0_W, HB2_0_W, HC_0_W, YPB_W, YPRS_W, YTLL_W;
  75. wire HB1,HB2, HC; // Cables para las salidas
  76.  
  77. tanque ins1 (.HB1_0(Q), .HB2_0(Q2), .HC_0(Q3), .YPB(YPB_W), .YPRS(YPRS_W), .YTLL(YTLL_W),.HB1(HB1),.HB2(HB2), .HC(HC));
  78.  
  79. reg CLK,D,D2,D3; // Reloj
  80. wire CLK_W,Q,Q2,Q3;
  81. // wire D_W,D2_W,D3_W;
  82.  
  83. flip_flop_d registro (.CLK(CLK_W), .D(HB1), .Q(Q));
  84. flip_flop_d2 registro2 (.CLK(CLK_W), .D2(HB2), .Q2(Q2));
  85. flip_flop_d3 registro3 (.CLK(CLK_W), .D3(HC), .Q3(Q3));
  86.  
  87. assign HB1_0_W=HB1_0;
  88. assign HB2_0_W=HB2_0;
  89. assign HC_0_W=HC_0;
  90. assign YPB_W=YPB;
  91. assign YPRS_W=YPRS;
  92. assign YTLL_W=YTLL;
  93.  
  94. assign CLK_W=CLK;
  95. //assign D_W=D;
  96. //assign D2_W=D2;
  97. //assign D3_W=D3;
  98. //initial forever #10 CLK = !CLK;
  99.  
  100. initial
  101. begin
  102.  
  103. /// VALORES INICIALES (NO MODIFICAR ESTO)
  104. HB1_0=1'b0;
  105. HB2_0=1'b0;
  106. HC_0=1'b0;
  107. YPB=1'b0;
  108. YPRS=1'b0;
  109. YTLL=1'b0;
  110. #10
  111.  
  112. // ACTIVANDO RELOJ Y FLIP FLOP (NO MODIFICAR ESTO)
  113. D=0;
  114. D2=0;
  115. D3=0;
  116. CLK=1;
  117. #10
  118. CLK=0;
  119. #10
  120.  
  121. // TESTING (ESPACIO DE MODIFICACIONES Y PRUEBAS)
  122.  
  123. /// PRUEBA 1
  124. $display("");
  125. $display("EN ESTE PUNTO EL CLOCK SE ENCIENDE PERO LAS VARIABLES SIGUEN ESTANDO IGUAL.");
  126. $display("NO SE HA INTRODUCIDO DATOS:");
  127. $display("- Estado del reloj: ", CLK);
  128. if (Q==0)$display("- Estado de Bomba 1: Apagada");else $display("- Estado de Bomba 1: Encendida");
  129. if (Q2==0)$display("- Estado de Bomba 2: Apagada");else $display("- Estado de Bomba 2: Encendida");
  130. if (Q3==0)$display("- Estado de Compresor: Desactivado");else $display("- Estado de Compresor: Activo");
  131. if (YPB!=0)$display("- Estado de Presion: Baja");
  132. if (YPRS!=0)$display("- Estado de Presion: Muy Baja");
  133. if (YPRS==0 && YPB==0)$display("- Estado de Presion: Estabilizada");
  134. if (YTLL==0)$display("Nivel del Tanque: Bajo");else $display("- Nivel del Tanque: Lleno");
  135.  
  136. /// PRUEBA 2
  137. $display("");
  138. YPB=1;
  139. #10
  140. $display("AHORA YPB TIENE EL VALOR DE 1. PERO EL RELOJ SIGUE EN CERO.");
  141. $display("DEBIDO A ESTO, NO HA CAMBIADO NADA EN EL CIRCUITO");
  142. $display("- Estado del reloj: ", CLK);
  143. if (Q==0)$display("- Estado de Bomba 1: Apagada");else $display("- Estado de Bomba 1: Encendida");
  144. if (Q2==0)$display("- Estado de Bomba 2: Apagada");else $display("- Estado de Bomba 2: Encendida");
  145. if (Q3==0)$display("- Estado de Compresor: Desactivado");else $display("- Estado de Compresor: Activo");
  146. if (YPB!=0)$display("- Estado de Presion: Baja");
  147. if (YPRS!=0)$display("- Estado de Presion: Muy Baja");
  148. if (YPRS==0 && YPB==0)$display("- Estado de Presion: Estabilizada");
  149. if (YTLL==0)$display("Nivel del Tanque: Bajo");else $display("- Nivel del Tanque: Lleno");
  150.  
  151.  
  152. /// PRUEBA 3
  153. $display("");
  154. CLK=1;
  155. #10
  156. $display("AL ACCIONAR EL CLOCK, SE DEBERIA ENCENDER LA PRIMERA BOMBA, PUES YPB ESTA ENCENDIDO");
  157. $display("- Estado del reloj: ", CLK);
  158. if (Q==0)$display("- Estado de Bomba 1: Apagada");else $display("- Estado de Bomba 1: Encendida (OBSERVE QUE LA BOMBA SE HA ENCENDIDO)");
  159. if (Q2==0)$display("- Estado de Bomba 2: Apagada");else $display("- Estado de Bomba 2: Encendida");
  160. if (Q3==0)$display("- Estado de Compresor: Desactivado");else $display("- Estado de Compresor: Activo");
  161. if (YPB!=0)$display("- Estado de Presion: Baja");
  162. if (YPRS!=0)$display("- Estado de Presion: Muy Baja");
  163. if (YPRS==0 && YPB==0)$display("- Estado de Presion: Estabilizada");
  164. if (YTLL==0)$display("Nivel del Tanque: Bajo");else $display("- Nivel del Tanque: Lleno");
  165.  
  166.  
  167. /// PRUEBA 4
  168. $display("");
  169. YTLL=1;
  170. #10
  171. $display("AHORA SE ACTIVO LA ENTRADA DE NIVEL LLENO. APAGAMOS Y ENCENDEMOS EL RELOJ.");
  172. CLK=0;
  173. YPB=1;
  174. $display("- Estado del reloj: ", CLK);
  175. CLK=1;
  176. #10
  177. $display("- Estado del reloj: ", CLK);
  178. $display("COMO AHORA YPB Y YTLL ESTAN ENCENDIDOS, OBSERVE COMO SE ACTIVA EL COMPRESOR DE AIRE");
  179. if (Q==0)$display("- Estado de Bomba 1: Apagada (OBSERVE QUE SE APAGO LA BOMBA)");else $display("- Estado de Bomba 1: Encendida") ;
  180. if (Q2==0)$display("- Estado de Bomba 2: Apagada");else $display("- Estado de Bomba 2: Encendida");
  181. if (Q3==0)$display("- Estado de Compresor: Desactivado");else $display("- Estado de Compresor: Activo (OBSERVE QUE EL COMPRESOR SE ENCENDIO)");
  182. if (YPB!=0)$display("- Estado de Presion: Baja");
  183. if (YPRS!=0)$display("- Estado de Presion: Muy Baja");
  184. if (YPRS==0 && YPB==0)$display("- Estado de Presion: Estabilizada");
  185. if (YTLL==0)$display("Nivel del Tanque: Bajo");else $display("- Nivel del Tanque: Lleno");
  186.  
  187.  
  188.  
  189. //$display("");
  190. //YPB=1;
  191. //CLK=0;
  192. //#10
  193. //CLK=1;
  194. //#10
  195. //$display(Q,Q2,Q3);
  196. //#10;
  197.  
  198.  
  199. //$display("");
  200. //YPB=1;
  201. //YTLL=1;
  202. //CLK=0;
  203. //#10
  204. //CLK=1;
  205. //#10
  206. //$display(Q,Q2,Q3);
  207. //#10;
  208.  
  209.  
  210.  
  211. // PRUEBA INICIAL DEL FLIP FLOP
  212. //D=0;
  213. //CLK=1;
  214.  
  215. //$display("Estado FlipFlop: ",Q);
  216. //D=1;
  217. //CLK=0;
  218. //#10
  219. //$display("Estado FlipFlop: ",Q);
  220. //D=1;
  221. //CLK=1;
  222. //#10
  223. //$display("Estado FlipFlop: ",Q);
  224. //D=1;
  225. //CLK=0;
  226. //#10
  227. //$display("Estado FlipFlop: ",Q);
  228. //D=0;
  229. //CLK=0;
  230. //#10
  231. //$display("Estado FlipFlop: ",Q);
  232. //D=0;
  233. //CLK=1;
  234. //#10
  235. //$display("Estado FlipFlop: ",Q);
  236.  
  237. end
  238.  
  239. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement