Guest User

Untitled

a guest
Aug 7th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --------------------------------------------------------------------
  2. --
  3. --  LPM_FF Parameterized Megafunction
  4. --
  5. --  Copyright 1991-2011 Corporation  
  6. --  Your use of Altera Corporation's design tools, logic functions  
  7. --  and other software and tools, and its AMPP partner logic  
  8. --  functions, and any output files from any of the foregoing  
  9. --  (including device programming or simulation files), and any  
  10. --  associated documentation or information are expressly subject  
  11. --  to the terms and conditions of the Altera Program License  
  12. --  Subscription Agreement, Altera MegaCore Function License  
  13. --  Agreement, or other applicable license agreement, including,  
  14. --  without limitation, that your use is for the sole purpose of  
  15. --  programming logic devices manufactured by Altera and sold by  
  16. --  Altera or its authorized distributors.  Please refer to the  
  17. --  applicable agreement for further details.
  18. --  
  19. --  11.1 Build 173  11/01/2011  
  20. --
  21. --  Version 2.0
  22. --
  23. --------------------------------------------------------------------
  24.  
  25. INCLUDE "lpm_constant.inc";
  26.  
  27. OPTIONS NAME_SUBSTITUTION = ON;
  28. PARAMETERS
  29. (
  30.     LPM_WIDTH,
  31.     LPM_AVALUE = "UNUSED",
  32.     LPM_SVALUE = "UNUSED",
  33.     LPM_FFTYPE = "DFF",
  34.     DEVICE_FAMILY,
  35.     CBXI_PARAMETER = "NOTHING"
  36. );
  37.  
  38. -- Get device definitions
  39. INCLUDE "aglobal111.inc";
  40.  
  41. -- Checks to see if external async control is needed
  42. DEFINE NEED_EXT_ASYNC_LOAD() = (FAMILY_HAS_PRESET() == 0)
  43.                                 AND (USED(aload) # (USED(aclr) & USED(aset)));
  44.  
  45. FUNCTION @CBXI_PARAMETER (aclr, aload, aset, clock, data[LPM_WIDTH-1..0], enable, sclr, sload, sset)
  46. RETURNS (q[LPM_WIDTH-1..0]);
  47.  
  48. SUBDESIGN lpm_ff
  49. (
  50.     data[LPM_WIDTH-1..0]        : INPUT = GND;
  51.     clock                       : INPUT;
  52.     enable                      : INPUT = VCC;
  53.     aclr, aset, aload           : INPUT = GND;
  54.     sclr, sset, sload           : INPUT = GND;
  55.     q[LPM_WIDTH-1..0]           : OUTPUT;
  56. )
  57.  
  58. VARIABLE
  59.     IF CBXI_PARAMETER != "NOTHING" GENERATE
  60.         auto_generated : @CBXI_PARAMETER WITH ( CBXI_PARAMETER = "NOTHING" );
  61.     ELSE GENERATE
  62.         dffs[LPM_WIDTH-1..0] : dffeas;
  63.         din[LPM_WIDTH-1..0]         : NODE;
  64.         IF USED(sload) # USED(sset) # USED(aload) GENERATE
  65.             asdata[LPM_WIDTH-1..0] : NODE;
  66.         END GENERATE;
  67.         IF USED(sload) # USED(sset) GENERATE
  68.             sctrl   :   NODE;          
  69.         END GENERATE;
  70.         IF (USED(LPM_AVALUE)) GENERATE
  71.             ac  : lpm_constant WITH (LPM_WIDTH=LPM_WIDTH, LPM_CVALUE=LPM_AVALUE);
  72.         END GENERATE;
  73.         IF (USED(LPM_SVALUE)) GENERATE
  74.             sc  : lpm_constant WITH (LPM_WIDTH=LPM_WIDTH, LPM_CVALUE=LPM_SVALUE);
  75.         END GENERATE;
  76.     END GENERATE;
  77.    
  78. BEGIN
  79.  
  80.     ASSERT (LPM_WIDTH > 0)
  81.             REPORT "Value of LPM_WIDTH parameter value must be greater than 0"
  82.             SEVERITY ERROR
  83.             HELP_ID LPM_FF_WIDTH;
  84.  
  85.     ASSERT (LPM_FFTYPE == "DFF" # LPM_FFTYPE == "TFF")
  86.             REPORT "Illegal value for LPM_FFTYPE parameter (%) -- value must be DFF or TFF"
  87.                 LPM_FFTYPE
  88.             SEVERITY ERROR
  89.             HELP_ID LPM_FF_TYPE;
  90.  
  91.     ASSERT (USED(aset) # USED(LPM_AVALUE) == 0)
  92.             REPORT "Ignored LPM_AVALUE parameter because the aset port is not used"
  93.             SEVERITY WARNING
  94.             HELP_ID LPM_FF_AVALUE;
  95.  
  96.     ASSERT (USED(sset) # USED(LPM_SVALUE) == 0)
  97.             REPORT "Ignored LPM_SVALUE parameter because the sset port is not used"
  98.             SEVERITY WARNING
  99.             HELP_ID LPM_FF_SVALUE;
  100.  
  101.     ASSERT (FAMILY_IS_KNOWN() == 1)
  102.             REPORT "Megafunction lpm_ff does not recognize the current device family (%) -- ensure that you are using the newest version of the megafunction"
  103.                 DEVICE_FAMILY
  104.             SEVERITY WARNING
  105.             HELP_ID LPM_FF_FAMILY_UNKNOWN;
  106.  
  107.     IF CBXI_PARAMETER != "NOTHING" GENERATE
  108.         IF USED(aclr) GENERATE
  109.             auto_generated.aclr = aclr;
  110.         END GENERATE;
  111.         IF USED(aload) GENERATE
  112.             auto_generated.aload = aload;
  113.         END GENERATE;
  114.         IF USED(aset) GENERATE
  115.             auto_generated.aset = aset;
  116.         END GENERATE;
  117.         IF USED(clock) GENERATE
  118.             auto_generated.clock = clock;
  119.         END GENERATE;
  120.         IF USED(data) GENERATE
  121.             auto_generated.data[] = data[];
  122.         END GENERATE;
  123.         IF USED(enable) GENERATE
  124.             auto_generated.enable = enable;
  125.         END GENERATE;
  126.         IF USED(q) GENERATE
  127.             q[] = auto_generated.q[];
  128.         END GENERATE;
  129.         IF USED(sclr) GENERATE
  130.             auto_generated.sclr = sclr;
  131.         END GENERATE;
  132.         IF USED(sload) GENERATE
  133.             auto_generated.sload = sload;
  134.         END GENERATE;
  135.         IF USED(sset) GENERATE
  136.             auto_generated.sset = sset;
  137.         END GENERATE;
  138.     ELSE GENERATE
  139.         % common ports %
  140.         dffs[].ena = enable;
  141.         dffs[].clk = clock;
  142.  
  143.         % Normal value to be loaded into the DFFE's .d port is din[] %
  144.         IF (LPM_FFTYPE == "DFF") GENERATE
  145.             din[] = data[];
  146.         ELSE GENERATE
  147.             IF USED(data) GENERATE
  148.                 din[] = data[] $ dffs[].q;
  149.             ELSE GENERATE
  150.                 din[] = !dffs[].q;
  151.             END GENERATE;
  152.         END GENERATE;
  153.  
  154.  
  155.         IF USED(sclr) GENERATE
  156.             dffs[].sclr = sclr;
  157.         END GENERATE;
  158.         IF USED(aclr) # USED(aset) GENERATE
  159.             IF USED(LPM_AVALUE) & USED(aset) GENERATE
  160.                 IF USED(aclr) GENERATE
  161.                     dffs[].clrn = !aclr & (!aset # ac.result[]);
  162.                     dffs[].prn = aclr # (!aset # !ac.result[]);
  163.                 ELSE GENERATE
  164.                     dffs[].clrn = !aset # ac.result[];
  165.                     dffs[].prn = !aset # !ac.result[];
  166.                 END GENERATE;
  167.             ELSE GENERATE
  168.                 IF USED(aclr) GENERATE
  169.                     dffs[].clrn = !aclr;
  170.                 END GENERATE;
  171.                 IF USED(aset) GENERATE
  172.                     dffs[].prn = !aset;
  173.                 END GENERATE;
  174.             END GENERATE;
  175.         END GENERATE;
  176.        
  177.         IF (LPM_FFTYPE == "DFF") GENERATE
  178.             IF USED(aload) GENERATE
  179.                 IF USED(sset) GENERATE
  180.                     IF USED(LPM_SVALUE) GENERATE
  181.                         asdata[] = data[] # !aload & sset & sc.result[];
  182.                     ELSE GENERATE
  183.                         asdata[] = data[] # !aload & sset;
  184.                     END GENERATE;
  185.                 ELSE GENERATE
  186.                     asdata[] = data[];
  187.                 END GENERATE;
  188.             ELSE GENERATE
  189.                 IF USED(sload) GENERATE
  190.                     IF USED(sset) GENERATE
  191.                         IF USED(LPM_SVALUE) GENERATE
  192.                             asdata[] = sset & sc.result[] # !sset & sload & data[];
  193.                         ELSE GENERATE
  194.                             asdata[] = sset # !sset  & sload & data[];         
  195.                         END GENERATE;
  196.                     ELSE GENERATE
  197.                         asdata[] = data[];
  198.                     END GENERATE;
  199.                 ELSE GENERATE
  200.                     IF USED(sset) GENERATE
  201.                         IF USED(LPM_SVALUE) GENERATE
  202.                             asdata[] = sset & sc.result[];
  203.                         ELSE GENERATE
  204.                             asdata[] = sset;           
  205.                         END GENERATE;
  206.                     END GENERATE;          
  207.                 END GENERATE;
  208.             END GENERATE;
  209.            
  210.             IF USED(sload) GENERATE
  211.                 IF USED(sset) GENERATE
  212.                     sctrl = sset # !sset & sload;
  213.                 ELSE GENERATE
  214.                     sctrl = sload;
  215.                 END GENERATE;
  216.             ELSE GENERATE
  217.                 IF USED(sset) GENERATE
  218.                     sctrl = sset;
  219.                 END GENERATE;
  220.             END GENERATE;
  221.  
  222.             IF USED(aload) # USED(sload) # USED(sset) GENERATE
  223.                 dffs[].asdata = asdata[];
  224.                 IF USED(aload) GENERATE
  225.                     dffs[].aload = aload;
  226.                 END GENERATE;
  227.                 IF USED(sload) # USED(sset) GENERATE
  228.                     dffs[].sload = sctrl;
  229.                 END GENERATE;
  230.             END GENERATE;
  231.             dffs[].d = din[];          
  232.         ELSE GENERATE
  233.             IF USED(sload) GENERATE
  234.                 IF USED(sset) GENERATE
  235.                     IF USED(LPM_SVALUE) GENERATE
  236.                         asdata[] = sset & sc.result[] # !sset & sload & data[];
  237.                     ELSE GENERATE
  238.                         asdata[] = sset # !sset  & sload & data[];         
  239.                     END GENERATE;
  240.                     sctrl = sload & !sset # sset;
  241.                 ELSE GENERATE
  242.                     asdata[] = sload & data[];
  243.                     sctrl = sload;             
  244.                 END GENERATE;
  245.             ELSE GENERATE
  246.                 IF USED(sset) GENERATE
  247.                     IF USED(LPM_SVALUE) GENERATE
  248.                         asdata[] = sset & sc.result[];
  249.                     ELSE GENERATE
  250.                         asdata[] = sset;           
  251.                     END GENERATE;
  252.                     sctrl = sset;              
  253.                 END GENERATE;
  254.             END GENERATE;
  255.            
  256.             IF USED(aload) GENERATE
  257.                 dffs[].aload = aload;
  258.                 dffs[].asdata = data[];
  259.             END GENERATE;
  260.            
  261.             IF USED(sload) # USED(sset) GENERATE
  262.                 dffs[].d = din[] & !sctrl # sctrl & asdata[];
  263.             ELSE GENERATE
  264.                 dffs[].d = din[];
  265.             END GENERATE;
  266.         END GENERATE;
  267.         q[] = dffs[].q;
  268.     END GENERATE; -- CBXI
  269.     IF !USED(q) GENERATE
  270.         q[] = GND;
  271.     END GENERATE;
  272. END;
Add Comment
Please, Sign In to add comment