nand_interface.v
上传用户:dgrongshen
上传日期:2016-07-09
资源大小:827k
文件大小:7k
源码类别:

VHDL/FPGA/Verilog

开发平台:

VHDL

  1. //-----------------------------------------------------------------
  2. // 
  3. // Owner: Xilinx Inc.
  4. // File:   nand_interface.v
  5. //
  6. // Purpose:  Interface for the AMD AM30LV0064D UltraNAND Flash 
  7. // device.  Decodes the lower address bits of the system 
  8. // bus to decode commands and set or clear interface signals.
  9. // This device includes a RESET input to force WP# asserted 
  10. // on power transitions. RESET is high until Vcc is valid
  11. // and goes high when supply power ramps down.
  12. //
  13. // Created: Verilog code generated by Visual HDL 8-2-01
  14. //  
  15. //  
  16. //----------------------------------------------------------------
  17.  
  18. module NAND_INTERFACE (write_n, read_n, port_addr,
  19.                        ce_n, ry_byn, reset, com_lat_n,
  20.                        ready, cle, ale, se_n,
  21.                        wp_n, outce_n, we_n, re_n);
  22. input write_n;
  23. input read_n;
  24. input [3:0] port_addr; 
  25. input ce_n;
  26. input ry_byn;
  27. input reset;
  28. input com_lat_n;
  29. output ready;
  30. output cle;
  31. output ale;
  32. output se_n;
  33. output wp_n;
  34. output outce_n;
  35. output we_n;
  36. output re_n;
  37. parameter RESET_ACTIVE = 1'b1;
  38. wire port0;
  39. wire port1;
  40. wire port2;
  41. wire port3;
  42. wire port4;
  43. wire port5;
  44. wire port6;
  45. wire port7;
  46. wire port8;
  47. wire port9;
  48. wire porta;
  49. wire portb;
  50. wire portc;
  51. wire portd;
  52. wire porte;
  53. wire portf;
  54. //  Create internal signals
  55. wire se_n_int;
  56. wire ale_int;
  57. wire wp_n_int;
  58. wire outce_n_int;
  59. reg visual_0_ale_int;
  60. assign ale_int = visual_0_ale_int;
  61. reg visual_0_se_n_int;
  62. assign se_n_int = visual_0_se_n_int;
  63. reg visual_0_wp_n_int;
  64. assign wp_n_int = visual_0_wp_n_int;
  65. reg visual_0_outce_n_int;
  66. assign outce_n_int = visual_0_outce_n_int;
  67. reg visual_0_ready;
  68. assign ready = visual_0_ready;
  69. //  ********************** SIGNAL ASSIGNMENTS *************************
  70. //  Assign output signals
  71. assign se_n = se_n_int;
  72. assign ale = ale_int;
  73. assign wp_n = wp_n_int;
  74. assign outce_n = outce_n_int;
  75. //  Data read/write port
  76. assign port0 = ( (~ ce_n) ) & ( (~ port_addr[3]) ) & ( (~ port_addr[2])) & 
  77. ( (~ port_addr[1]) ) & ( (~ port_addr[0]));
  78.                           
  79. //  CLE write port
  80. assign port1 = ( (~ ce_n) ) & ( (~ port_addr[3]) ) & ( (~ port_addr[2])) & 
  81. ( (~ port_addr[1]) ) & port_addr[0];
  82.                           
  83. //  Used to set ALE
  84. assign port2 = ( (~ ce_n) ) & ( (~ port_addr[3]) ) & ( (~ port_addr[2])) & 
  85. port_addr[1] & ( (~ port_addr[0]) );
  86.                           
  87. //  Used to clear ALE
  88. assign port3 = ( (~ ce_n) ) & ( (~ port_addr[3]) ) & ( (~ port_addr[2])) 
  89. & port_addr[1] & port_addr[0];
  90.                           
  91. //  Used to set SE#
  92. assign port4 = ( (~ ce_n) ) & ( (~ port_addr[3]) ) & port_addr[2] & 
  93. ( (~port_addr[1]) ) & ( (~port_addr[0]) );
  94.                                           
  95. //  Used to clear SE#
  96. assign port5 = ( (~ ce_n) ) & ( (~ port_addr[3]) ) & port_addr[2] & 
  97. ( (~port_addr[1]) ) & port_addr[0];
  98.  
  99. //  Used to set WP#
  100. assign port6 = ( (~ ce_n) ) & ( (~ port_addr[3]) ) & port_addr[2] &
  101.             port_addr[1] & ( (~ port_addr[0]) );
  102.                                   
  103. //  Used to clear WP#
  104. assign port7 = ( (~ ce_n) ) & ( (~ port_addr[3]) ) & port_addr[2] &
  105.               port_addr[1] & port_addr[0];
  106.                                   
  107. //  Used to set OUTCE#
  108. assign port8 = ( (~ ce_n) ) & port_addr[3] & ( (~ port_addr[2]) ) & 
  109. ( (~port_addr[1]) ) & ( (~port_addr[0]) );
  110.                                           
  111. //  Used to clear OUTCE#
  112. assign port9 = ( (~ ce_n) ) & port_addr[3] & ( (~ port_addr[2]) ) & 
  113. ( (~port_addr[1]) ) & port_addr[0];
  114.                                           
  115. //  No Function
  116. assign porta = ( (~ ce_n) ) & port_addr[3] & ( (~ port_addr[2]) ) & 
  117. port_addr[1] & ( (~ port_addr[0]) );
  118. assign portb = ( (~ ce_n) ) & port_addr[3] & ( (~ port_addr[2]) ) & 
  119. port_addr[1] & port_addr[0];
  120. assign portc = ( (~ ce_n) ) & port_addr[3] & port_addr[2] & 
  121. ( (~port_addr[0]) );
  122. assign portd = ( (~ ce_n) ) & port_addr[3] & port_addr[2] & 
  123. ( (~port_addr[1]) ) & port_addr[0];
  124. assign porte = ( (~ ce_n) ) & port_addr[3] & port_addr[2] & 
  125. port_addr[1] & ( (~ port_addr[0]) );
  126. //  To read RY/BY# state
  127. assign portf = ( (~ ce_n) ) & port_addr[3] & port_addr[2] & port_addr[1]
  128.                & port_addr[0];
  129.                                   
  130. //  Assert CLE on all port1 accesses
  131. assign cle = port1;
  132. //  Drive WE# to UltraNAND for port0 or port1
  133. assign we_n =  (~ (( (~ write_n) ) & (port0 | (port1 & ( (~ com_lat_n) )
  134.                           )))) ;
  135. //  Drive REor to UltraNAND for port0 only
  136. assign re_n =  (~ (( (~ read_n) ) & port0)) ;
  137. //  ********************** PROCESS: ALE_SIG ******************************
  138. //  Purpose: Assert ALE signal
  139. always @(reset or write_n or port2 or port3)
  140. begin
  141.         //  Reset Condition
  142.         if ((reset == RESET_ACTIVE))
  143.         begin
  144.                 visual_0_ale_int <= 1'b0;                   
  145.         end
  146.         
  147.         //  Latch ALE on write to PORT2
  148.         else if ((!write_n) && (port2))
  149.         begin
  150.                 visual_0_ale_int <= 1'b1;                 
  151.         end
  152.         
  153.         //  Clear on write to PORT3
  154.         else if ((!write_n) && (port3))
  155.         begin
  156.                 visual_0_ale_int <= 1'b0;
  157.         end
  158.      
  159. end
  160. //  ********************** PROCESS: SEN_SIG ******************************
  161. //  Purpose: Assert SE# signal
  162. always @(reset or write_n or port4 or port5)
  163. begin
  164.         //  Reset Condition
  165.         if ((reset == RESET_ACTIVE))
  166.         begin
  167.                 visual_0_se_n_int <= 1'b1;                   
  168.         end
  169.         
  170.         //  Latch SE# on write to PORT4
  171.         else if ((!write_n) && (port4))
  172.         begin
  173.                 visual_0_se_n_int <= 1'b0;                   
  174.         end
  175.         
  176.         //  Clear on write to PORT5
  177.         else if ((!write_n) && (port5))
  178.         begin
  179.                 visual_0_se_n_int <= 1'b1;                   
  180.         end
  181.         
  182. end
  183. //  ********************** PROCESS: WPN_SIG ******************************
  184. //  Purpose: Assert WP# signal
  185. always @(reset or write_n or port6 or port7)
  186. begin
  187.         //  Reset Condition
  188.         if ((reset == RESET_ACTIVE))
  189.         begin
  190.                 visual_0_wp_n_int <= 1'b0;                   
  191.         end
  192.         
  193.         //  Latch WP# on write to PORT6
  194.         else if ((!write_n) && (port6))
  195.         begin
  196.                 visual_0_wp_n_int <= 1'b0;                  
  197.         end
  198.         
  199.         //  Clear on write to PORT7
  200.         else if ((!write_n) && (port7))
  201.         begin
  202.                 visual_0_wp_n_int <= 1'b1;                   
  203.         end
  204.         
  205. end
  206. //  ********************* PROCESS: OUTCE_SIG *****************************
  207. //  Purpose: Assert OUTCE# signal
  208. always @(reset or write_n or port8 or port9)
  209. begin
  210.         //  Reset Condition
  211.         if ((reset == RESET_ACTIVE))
  212.         begin
  213.                 visual_0_outce_n_int <= 1'b1;                   
  214.         end
  215.         
  216.         //  Set OUTCE# (low) on write to port8
  217.         else if ((!write_n) && (port8))
  218.         begin
  219.                 visual_0_outce_n_int <= 1'b0;                   
  220.         end
  221.         
  222.         //  Clear OUTCE# (high) on write to port9
  223.         else if ((!write_n) && (port9))
  224.         begin
  225.                 visual_0_outce_n_int <= 1'b1;                   
  226.         end
  227.         
  228. end
  229. //  ********************** PROCESS: READY_SIG ******************************
  230. //  Purpose: Assert ready signal
  231. always @(portf or read_n)
  232. begin
  233.         //  READY is only driven during a PORTF read
  234.         //  READY shows the state of RY/BY#
  235.         if ((portf) && (!read_n))
  236.                 visual_0_ready <= ry_byn;
  237.         else
  238.                 visual_0_ready <= 1'bz;
  239. end
  240. endmodule