このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。
1.4.1.1. 同期メモリーブロックの使用
1.4.1.2. サポートされていないリセットおよび制御条件の回避
1.4.1.3. Read-During-Write動作の確認
1.4.1.4. RAMの推論と実装の制御
1.4.1.5. 古いデータのRead-During-Write動作を備えたシングルクロック同期RAM
1.4.1.6. 新しいデータのRead-During-Write動作を備えたシングルクロック同期RAM
1.4.1.7. Verilog HDLシンプル・デュアル・ポートおよびデュアル・クロック同期RAM
1.4.1.8. トゥルー・デュアル・ポート同期RAM
1.4.1.9. 混合幅デュアルポートRAM
SystemVerilog Mixed-Width RAM with Read Width Smaller than Write Width
SystemVerilog Mixed-Width RAM with Read Width Larger than Write Width
VHDL Mixed-Width RAM with Read Width Smaller than Write Width
VHDL Mixed-Width RAM with Read Width Larger than Write Width
1.4.1.10. バイトイネーブル信号付きRAM
1.4.1.11. 電源投入時に初期メモリーの内容の指定
2.3.6.1. インテル® Hyperflex™ Retimer Readiness (HRR)のルール
2.3.6.2. Timing Closure (TMC)のルール
2.3.6.3. Clock Domain Crossing (CDC)tルール
2.3.6.4. プラットフォーム・デザイナー Interface (PDI)のルール
2.3.6.5. Clock(CLK)のルール
2.3.6.6. Reset(RES)のルール
2.3.6.7. Non-Synchronous Structure(NSS)のルール
2.3.6.8. Signal Race (SGR)のルール
2.3.6.9. Floorplanning (FLP)のルール
2.3.6.1.1. HRR-10003: Registers on High Fan-Out Non-Global Nets
2.3.6.1.2. HRR-10004: High Fan-out Non-Global Nets
2.3.6.1.3. HRR-10101: Asynchronous Clears
2.3.6.1.4. HRR-10107: Maximum Fan-out for Signal
2.3.6.1.5. HRR-10115: High Fan-out Signal
2.3.6.1.6. HRR-10201: Power Up Don't Care Setting May Prevent Retiming
2.3.6.1.7. HRR-10203: Register Power-Up Settings Conflict with Device Settings
2.3.6.1.8. HRR-10204: Reset Release Instance Count Check
2.3.6.2.1. TMC-20001: Timing Paths With Impossible Hold Requirement
2.3.6.2.2. TMC-20002: Timing Paths with Removal Slack Exceeding Threshold
2.3.6.2.3. TMC-20004: Timing Paths with Setup Slack Exceeding Threshold
2.3.6.2.4. TMC-20005: Timing Paths with Recovery Slack Exceeding Threshold
2.3.6.2.5. TMC-20006: Unregistered User-Partition Inputs
2.3.6.2.6. TMC-20007: Unregistered Paths Between User-Partitions
2.3.6.2.7. TMC-20010: Logic Level Depth
2.3.6.2.8. TMC-20011: Missing Input Delay
2.3.6.2.9. TMC-20012: Missing Output Delay
2.3.6.2.10. TMC-20013: Partial Input Delay
2.3.6.2.11. TMC-20014: Partial Output Delay
2.3.6.2.12. TMC-20015: Inconsistent Min-Max Delay
2.3.6.2.13. TMC-20016: Invalid Reference Pin
2.3.6.2.14. TMC-20017: Loops Detected
2.3.6.2.15. TMC-20018: Latches Detected
2.3.6.2.16. TMC-20019: Partial Multicycle Assignment
2.3.6.2.17. TMC-20020: Invalid Multicycle Assignment
2.3.6.2.18. TMC-20021: Partial Min-Max Delay Assignment
2.3.6.2.19. TMC-20022: Incomplete I/O Delay Assignment
2.3.6.2.20. TMC-20050: RAM Control Signals Driven by LUTs or ALMs instead of DFFs
2.3.6.2.21. TMC-20051: RAM Control Signals Driven by High Fan-Out Net
2.3.6.2.22. TMC-20052: Inferred Latch Count Check
2.3.6.2.23. TMC-20200: Setup-Failing Paths with Impossible Requirements
2.3.6.2.24. TMC-20201: Setup-Failing Paths with High Clock Skew
2.3.6.2.25. TMC-20202: Setup-Failing Paths with High Logic Delay
2.3.6.2.26. TMC-20203: Setup-Failing Paths with High Fabric Interconnect Delay
2.3.6.2.27. TMC-20204: Setup-Failing Path Endpoints with Retiming Restrictions
2.3.6.2.28. TMC-20205: Setup-Failing Path Endpoints with Explicit Power-Up States Can Restrict Retiming
2.3.6.2.29. TMC-20500: Hierarchical Tree Duplication was Shallower than Possible
2.3.6.2.30. TMC-20501: Hierarchical Tree Duplication was Shallower than Requested
2.3.6.2.31. TMC-20550: Automatically-Discovered Duplication Candidate Rejected for Placement Constraint
2.3.6.2.32. TMC-20551: Automatically-Discovered Duplication Candidate Likely Requires More Duplication
2.3.6.2.33. TMC-20552: User-Directed Duplication Candidate was Rejected
2.3.6.2.34. TMC-20601: Registers with High Immediate Fan-Out Tension
2.3.6.2.35. TMC-20602: Registers with High Timing Path Endpoint Tension
2.3.6.2.36. TMC-20603: Registers with High Immediate Fan-Out Span
2.3.6.2.37. TMC-20604: Registers with High Timing Path Endpoint Span
2.3.6.5.1. CLK-30001: Gated Clock is Not Feeding at Least a Predefined Number of Clock Ports to Effectively Save Power
2.3.6.5.2. CLK-30002:クロック・ピン以外のピンをドライブするクロック
2.3.6.5.3. CLK-30026: Missing Clock Assignment
2.3.6.5.4. CLK-30027: Multiple Clock Assignment
2.3.6.5.5. CLK-30028: Invalid Generated Clock
2.3.6.5.6. CLK-30029: Invalid Clock Assignments
2.3.6.5.7. CLK-30030: PLL Setting Violation
2.3.6.5.8. CLK-30031: Input Delay Assigned to Clock
2.3.6.6.1. RES-30131: Reset Nets with Polarity Conflict
2.3.6.6.2. RES-30132: Registers May Not Be Properly Reset
2.3.6.6.3. RES-30133: Embedded Memory Blocks with Initialized Content That Might be Affected by Spurious Writes
2.3.6.6.4. RES-50001: Asynchronous Reset Is Not Synchronized
2.3.6.6.5. RES-50002: Asynchronous Reset is Insufficiently Synchronized
2.3.6.6.6. RES-50003: Asynchronous Reset Missing Timing Constraint
2.3.6.6.7. RES-50004: Multiple Asynchronous Resets within Reset Synchronizer Chain
2.3.6.6.8. RES-50005: RAM Control Signals Driven by Flops with Asynchronous Clears
2.3.6.7.1. NSS-30011: Design Contains Combinational Loops
2.3.6.7.2. NSS-30012: Design Contains Latches
2.3.6.7.3. NSS-30013: Design Contains Ripple Clock Structures
2.3.6.7.4. NSS-30014: Asynchronous Pulse Generators
2.3.6.7.5. NSS-30015: Multiple Pulses Generated in the Design
2.3.6.7.6. NSS-30016: Design Contains SR Latches
2.3.6.7.7. NSS-30017: Register Output Driving Its Own Control Signal Directly or Through Combinational Logic
2.3.6.7.8. NSS-30018: Design Contains Delay Chains
2.3.6.8.1. SGR-30020: Synchronous and Asynchronous Ports of the Same Register Driven by the Same Signal Source
2.3.6.8.2. SGR-30021: More Than One Asynchronous Port of a Register Driven by the Same Signal Source
2.3.6.8.3. SGR-30022: Clock Port and Any Other Port of a Register Driven by the Same Signal Source
1.4.1.9. 混合幅デュアルポートRAM
このセクションのRAMコードの例は、異なる幅のデータポートを持つRAMを推論するSystemVerilogおよびVHDLコードを示しています。
Verilog-1995は、異なるリード幅、書き込み幅、またはその両方をモデル化するための多次元配列がないため、混合幅RAMをサポートしていません。 Verilog-2001は、このタイプのロジックが複数のパック・ディメンションを必要とするため、混合幅RAMをサポートしません。異なる合成ツールは、これらのメモリーのサポートが異なる場合があります。このセクションでは、 インテル® Quartus® Primeプロ・エディション合成の推論規則について説明します。
多次元パック配列の最初の次元は、幅の広いポートと幅の狭いポートの比率を表します。 2番目の次元は、より狭いポート幅を表します。リードおよびライト・ポートの幅は、ターゲットデバイスのメモリーブロックでサポートされるリードまたはライトの比率を指定する必要があります。それ以外の場合、合成ツールはRAMを推論しません。
サポートされているリード幅と書き込み幅の組み合わせを備えたパラメーター化された例について詳しくは インテル® Quartus® Prime HDLテンプレートを参照してください 。また、2つの混合幅リード・ポートと2つの混合幅ライト・ポートを備えた真のデュアルポートRAMの例を見つけることができます。
SystemVerilog Mixed-Width RAM with Read Width Smaller than Write Width
module mixed_width_ram // 256x32 write and 1024x8 read ( input [7:0] waddr, input [31:0] wdata, input we, clk, input [9:0] raddr, output logic [7:0] q ); logic [3:0][7:0] ram[0:255]; always_ff@(posedge clk) begin if(we) ram[waddr] <= wdata; q <= ram[raddr / 4][raddr % 4]; end endmodule : mixed_width_ram
SystemVerilog Mixed-Width RAM with Read Width Larger than Write Width
module mixed_width_ram // 1024x8 write and 256x32 read ( input [9:0] waddr, input [31:0] wdata, input we, clk, input [7:0] raddr, output logic [9:0] q ); logic [3:0][7:0] ram[0:255]; always_ff@(posedge clk) begin if(we) ram[waddr / 4][waddr % 4] <= wdata; q <= ram[raddr]; end endmodule : mixed_width_ram
VHDL Mixed-Width RAM with Read Width Smaller than Write Width
library ieee; use ieee.std_logic_1164.all; package ram_types is type word_t is array (0 to 3) of std_logic_vector(7 downto 0); type ram_t is array (0 to 255) of word_t; end ram_types; library ieee; use ieee.std_logic_1164.all; library work; use work.ram_types.all; entity mixed_width_ram is port ( we, clk : in std_logic; waddr : in integer range 0 to 255; wdata : in word_t; raddr : in integer range 0 to 1023; q : out std_logic_vector(7 downto 0)); end mixed_width_ram; architecture rtl of mixed_width_ram is signal ram : ram_t; begin -- rtl process(clk, we) begin if(rising_edge(clk)) then if(we = '1') then ram(waddr) <= wdata; end if; q <= ram(raddr / 4 )(raddr mod 4); end if; end process; end rtl;
VHDL Mixed-Width RAM with Read Width Larger than Write Width
library ieee; use ieee.std_logic_1164.all; package ram_types is type word_t is array (0 to 3) of std_logic_vector(7 downto 0); type ram_t is array (0 to 255) of word_t; end ram_types; library ieee; use ieee.std_logic_1164.all; library work; use work.ram_types.all; entity mixed_width_ram is port ( we, clk : in std_logic; waddr : in integer range 0 to 1023; wdata : in std_logic_vector(7 downto 0); raddr : in integer range 0 to 255; q : out word_t); end mixed_width_ram; architecture rtl of mixed_width_ram is signal ram : ram_t; begin -- rtl process(clk, we) begin if(rising_edge(clk)) then if(we = '1') then ram(waddr / 4)(waddr mod 4) <= wdata; end if; q <= ram(raddr); end if; end process; end rtl;