双口RAM的VHDL描述
第五章 组合逻辑电路的VHDL语言描述
BEGIN
PROCESS ( a, datain ) BEGIN IF ( datain = '1' ) THEN dataout <= '0' ; ELSE dataout <= '1' ; END IF ; END PROCESS ; END ARCHITECTURE behavioral_2 ; --RTL描述方式 ,MAX中需要加入时钟a
第5章
组合逻辑电路的VHDL描述
仿真波形
第5章
组合逻辑电路的VHDL描述
5.1.5 2输入同或门电路
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cynxor2 IS PORT ( datain1, datain2 : IN STD_LOGIC ; dataout : OUT STD_LOGIC ) ; END ENTITY cynxor2 ; ARCHITECTURE behavioral OF cynxor2 IS BEGIN
END ENTITY cyxor2 ;
ARCHITECTURE behavioral OF cyxor2 IS BEGIN dataout <= datain1 XOR datain2 ; END ARCHITECTURE behavioral ;
第5章
组合逻辑电路的VHDL描述
LIBRARY IEEE ;
第5章
组合逻辑电路的VHDL描述
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY cynot IS
PORT ( a, datain : IN STD_LOGIC ; END ENTITY cynot ; ARCHITECTURE behavioral_2 OF cynot IS dataout : OUT STD_LOGIC ) ;
VHDL代码书写规范
VHDL代码书写规范(定稿)文件编号:编制:审核:可靠性审核:标准化:批准:文件会签页文件历史记录文件编号现行版本V1.0 文件标题VHDL代码书写规范文件履历版次编制日期更改内容(条款)V1.0V1.0目录1.目的 (1)2.范围 (1)3.术语说明 (1)4.书写规范 (1)4.1命名规范 (1)R1.一个文件只包含一个模块,文件命名和实体命名必须相同。
文件名大写,其后缀小写。
(1)R2.顶层文件命名方式使用工程名、器件型号与_TOP结合。
顶层文件的元件实例化,后缀使用_module;第二层文件的元件实例化,后缀使用_block;第三层之后不做定义(若遇到常见的基本逻辑电路或子模块,如:SRAM、FIFO等,那么优先使用具有代表性的名称) (1)R3.代码编写之前,以文档的方式,根据功能分类,分别对FPGA的外部端口进行命名约定。
(2)R4.命名要有实际意义。
(2)R5.命名标识符的首字符必须是字母,包含多个单词的标志符单词之间使用下划线分开。
信号、变量等的命名最后字符也一定要求是字母,中间的可以是数字或者其他合法符号。
(2)R6.模块、信号、变量等的命名不大于64个字符 (2)R7.实体、结构名、端口信号、常量用大写标识 (2)R8.行为级、结构级和数据流级结构命名分别以“BEH_实体名”、“STR_实体名”和“RTL_实体名”区分。
如果是混合使用,或者是分不清使用了那一种结构,那么就是用“ARC_实体名”命名。
(3)R9.单口RAM模块命名以SPRAM作后缀;双口RAM模块命名以DPRAM作后缀;ROM模块命名以ROM作后缀;FIFO模块命名以FIFO_作后缀;数字时钟管理模块命名以DCM作后缀;锁相环模块命名以PLL作后缀;乘法模块命名以MULT作后缀;除法模块命名以DIV作后缀;加法模块命名以ADD作后缀;减法模块命名以SUB作后缀。
(3)R10.模块实例化时,采用‘Un_xx_元件名’标识,cell实例化时使用‘Mn_xx_元件名’标识。
双口RAM应用实例
双端口RAM在高速数据采集中的应用利用传统方法设计的高速数据采集系统由于集成度低、电路复杂,高速运行电路干扰大,电路可靠性低,难以满足高速数据采集工作的要求。
应用FPGA可以把数据采集电路中的数据缓存、控制时序逻辑、地址译码、总线接口等电路全部集成进一片芯片中,高集成性增强了系统的稳定性,为高速数据采集提供了理想的解决方案。
下面以一个高速数据采集系统为例介绍双端口RAM的应用。
该系统要求实现对频率为5MHz的信号进行采样,系统的计算处理需要对信号进行波形分析,信号采样时间为25μs。
根据设计要求,为保证采样波形不失真,A/D采样频率用80MHz,采样精度为8位数据宽度。
计算得出存储容量需要2K字节。
其系统结构框图如图3所示,图4给出了具体电路连接图。
根据设计要求,双端口RAM的LPM_WIDTH参数设置为8,LPM_WIDTHAD 参数设置为11(211=2048),使用读写使能端及读写时钟。
ADCLK、WRCLK和地址发生器的计数频率为80MHz。
A/D转换值对双端口RAM的写时序为顺序写方式,每完成一次A/D转换,存储一次数据,地址加1指向下一单元,因此写地址发生器(RAM_CONTROL)采用递增计数器实现,计数频率与ADCLK、WRCLK一致以保证数据写入时序的正确性。
写操作时序由地址和时钟发生器、A/D转换时钟和双端口RAM的写时钟产生。
停止采样时AD_STOP有效,写地址发生器停止计数,同时停止对RAM的写操作。
将地址发生器的计数值接至DSP总线可以获取采样的首尾指针。
地址发生器单元一般用(VHDL)语言编程实现,然后生成符号文件RAM_CONTROL在上层文件调用。
其部分VHDL语言程序如下:对双端口RAM的读操作采用存储器映像方式,其读出端口接DSP的外扩RAM 总线,DSP可随机读取双端口RAM的任一单元数据,以方便波形分析。
由于LPM_RAM_DP模块的读端数据总线q不具有三态特性,因此调用三态缓冲器74244,通过其将输出数据连接到DSP数据总线上。
基于FPGA的数据遗弃式双口RAM的设计及其在数据采样中的应用
Ke wo d : a d n d Du 1 o AM ; P y r s Ab n o e ; a . r R p t F GA; VHDL
0 引言 在 某些工程 中 ,需要及 时得 到 系统最 新一 段 时 问的数 据来诊 断或检测 系统 最新 的运作 状 态 ,因此 对 系统采 集和数 据存储 提 出 了新 的要求 。 文献 【—] 13 中所 实 现的系统 ,在一 定程 度上 提高 了采 样系 统 的 速 度 和精 确 度 , 中文献 [] 其 3还采 用 串行 FF IO双 口 R M 作 为采 样 系统 的数 据存 储 。FF 先 入 先 出 ) A IO(
双 口R AM 的数据存储结构是先进先出的数据存储 模式。这种数据存储模式 即不能存储最新 时问片的 数据 ,同时在高速的采样系统 中也容易造成数据的 堵塞 , 容易出现数据丢失的情况。 本文提 出采用 F G P A构建 的数据遗弃式 双 口 R M,不 断地 将数 据 从 双 口 R M 的 首 位存 入 A A R M, A 同时双 口R M 中数据在最高位遗弃。 A 这种遗
wi D9 6 w i pe e f bt D o v r rt o s- t ido i . edd t smpigss m a t A 7 , hc i a ic 一iA/ c n et 。oc nt c kn f g s e aa a l t t t h hs o1 6 e i a u h h p n ye h
基
于
-1 T
_ D
A 数 遗 式 口 A的 计 其 数 采 中 应 的据 弃双 R 设及在据 样的用 M
双口RAM
双口RAM1.模块功能:双口RAM模块主要采用IDT7132等器件,它是一种特殊的数据存储芯片,它既可以用于单片机存储大容量的数据,也可以以双口RAM为共享存储器来实现两个处理器之间的通信和数据传输。
双口RAM的优点是提供了两条完全独立的端口,每个端口都有完整的地址、数据和控制总线,允许两个CPU对双端口存储器的同一单元进行同时存取;具有两套完全独立的终端逻辑来实现两个CPU 之间的握手控制信号;具有两套独立的“忙”逻辑,保证两个CPU同时对同一单元进行读/写操作的正确性。
对于单个CPU而言,双口RAM同普通RAM没有什么明显的区别。
本模块原理图见图1。
图13.主要器件:(1)IDT7132:(a)器件功能:IDT7132是高速2k*8端口静态RAM,可提供图2.1.3 IDT7132引脚图两个拥有独立的控制总线、地址总线和I/O总线端口,允许CPU独立访问内部的任何存储单元。
当/CE 引脚出现下降沿时,选中DPRAM即可通过控制OE 或R/W来访问内部存储单元。
(b) 器件引脚:IDT7132的引脚图如图2所示。
/CE、/CER:(左、右)片选控制信号。
R/WL、R/WR:(左、右)读写控制信号。
/OEL、/OER:(左、右)使能控制信号。
/BUSYL、/BUSYR:(左、右)繁忙查询控制信号。
A0L—A9L、A0R—A9R:(左、右)地址总线。
I/O0L—I/O7L、I/O0R—I/O7R:(左、右)输入/输出总线。
VCC:电源。
(c) 工作原理:IDT7132的工作时序如图3所示。
它与RAM的读写时序非常类似。
当CPU选中DPRAM时/CE引脚出现下降沿,当控制线/OE为高且R/W为低时,CPU对内部存储单元进行写操作;而当控制线OE为低且R/W为高时,CPU对内部存储单元进行读操作。
当外部CPU通过两个端口对双口RAM内部的同一个存储单元进行操作时,系统将出现竞图 2争。
这种竞争一般有如下两种模式:(1)如果两个端口的总线访问地址相同,并先于片选信号/CE有效,则片内逻辑将在CEL与CER之间发生竞争。
(完整)《EDA技术与应用》期末试卷
EDA試卷答案一、单项选择题1、2. 基于EDA软件的FPGA/CPLD设计流程为:原理图/HDL文本输入→__A__→综合→适配→____B____→编程下载→硬件测试。
P14A. 功能仿真B. 时序仿真C。
逻辑综合D。
配置3. IP核在EDA技术和开发中具有十分重要的地位;提供用VHDL等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路的IP核为__A___.P25A. 软IPB. 固IPC。
硬IP D。
全对4。
综合是EDA设计流程的关键步骤,在下面对综合的描述中,_____D____是错误的。
P15A。
综合就是把抽象设计层次中的一种表示转化成另一种表示的过程。
B. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件。
C. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束。
D. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系是唯一的(即综合结果是唯一的)。
5. 大规模可编程器件主要有FPGA、CPLD两类,其中CPLD通过___A__实现其逻辑功能。
P42A. 可编程乘积项逻辑B. 查找表(LUT)C。
输入缓冲 D. 输出缓冲6。
VHDL语言是一种结构化设计语言;一个设计实体(电路模块)包括实体与结构体两部分,结构体描述_____B___.P274A. 器件外部特性B。
器件的内部功能C. 器件外部特性与内部功能D. 器件的综合约束7. 电子系统设计优化,主要考虑提高资源利用率减少功耗(即面积优化),以及提高运行速度(即速度优化);下列方法中___A___不属于面积优化.P238A。
流水线设计B。
资源共享C。
逻辑优化 D. 串行化8. 进程中的信号赋值语句,其信号更新是___B____。
P134A. 立即完成B。
在进程的最后完成C。
按顺序完成 D. 都不对9。
不完整的IF语句,其综合结果可实现__A__。
双口RAM的verilog描述
双口RAM的verilog描述
双口RAM的verilog描述
分类:数字电路
* RAM的verilog描述如下:
module ram(din,ain,dout,aout,rd,wr);//这是一个双口RAM,分别有:
//输入端:输入地址ain;输入数据din;上升沿有效的写信号wr;
//输出端:输出地址aout;输出数据dout;高电平有效的读信号rd;
inout [7:0] din;
input [7:0] ain,aout;
input rd,wr;
output [7:0] dout;
reg [7:0] memory [0:255]; //请注意这是存储阵列的描述方法,描述了一个共有2 56个字的存储阵列,
//每个字是8位
assign dout = rd ? memory[aout] : 8'bz; //"assign"关键字表示并行赋值语句的
开始
//"?"运算符的作用和在C语言中一样
//"?"运算符的作用和在C语言中一样
//"8'bz"是一个常量,表示一个字节的高阻态,其中
//8表示长度是8bit,"'"是固定分割符,"b"表示后面的数据是以比特形式给出的, //"z"表示高阻;
//举例:4'ha表示长4bit的数"1010"
//类似的还可举出5'b10111,6'o33等等
always @(posedge wr)
memory[ain] = din;
endmodule。
fpga双端口bram的用法
FPGA双端口BRAM的用法在现代的数字设计领域中,FPGA(Field-Programmable Gate Array)技术已经得到了广泛的应用。
FPGA是一种可编程的逻辑器件,可以通过编程来实现不同的数字电路功能。
而BRAM(Block RAM)是FPGA中的一种重要资源,用于存储数据和临时变量。
在FPGA设计中,双端口BRAM是一种非常有用的资源,能够提高设计的性能和灵活性。
1. 双端口BRAM的基本概念双端口BRAM是指具有两个读写端口的块RAM。
这意味着它可以同时进行读和写操作,而不会出现数据冲突。
这种特性使得双端口BRAM非常适合在FPGA设计中用于存储和处理大量的数据。
在图像处理、信号处理和深度学习等领域,双端口BRAM可以有效地提高算法的性能和并行处理能力。
2. 双端口BRAM的应用双端口BRAM在FPGA设计中有多种应用方式,可以用于实现数据缓冲、数据通路和状态机等功能。
在数据缓冲方面,双端口BRAM可以用于存储输入和输出数据,同时进行读写操作,以实现数据的缓冲和流水线处理。
在数据通路方面,双端口BRAM可以用于实现数据的交换和共享,以便多个模块能够同时访问和处理数据。
在状态机方面,双端口BRAM可以用于存储状态变量和控制信号,以实现复杂的状态机和状态转换逻辑。
3. 如何使用双端口BRAM在FPGA设计中,使用双端口BRAM需要首先进行资源分配和位置区域映射。
然后需要进行读写控制和数据流控制,以确保数据的正确读写和流水线处理。
需要根据具体的应用场景和性能要求,进行数据路径和控制逻辑的优化和调整。
使用双端口BRAM需要充分理解其工作原理和时序要求,以确保设计的正确性和稳定性。
4. 个人观点和总结作为FPGA设计领域的一名从业者,我认为双端口BRAM是一种非常有价值的资源,能够大大提高FPGA设计的性能和灵活性。
通过合理的应用和设计,双端口BRAM可以在信号处理、图像处理和人工智能等领域起到重要作用,为项目的成功实现提供了有力支持。
第九章VHDL描述数字电路
基于硬件描述语言的设计过程
• VHDL语言的基本特点
– 可以在各个不同的设计阶段对系统进行描述。 包括系统级、寄存器级和门级。 – 支持结构化的层次设计方法。支持自顶向下的 层次化设计方法。 – 具有很好的时间性能的描述机制,可以真实的 反映系统或电路的时间特性。 – 可以支持各种不同类型的数字电路和系统的设 计。VHDL的设计主要是用来设计同步系统, 但是也可以设计异步电路。
基于硬件描述语言的设计过程
• 设计过程
– 基于硬件描述 语言的数字系 统设计是一个 从抽象到具体 的过程。 – 逻辑模拟验证 设计的正确性 – 时间模拟验证 系统的时间特 性。
基于硬件描述语言的设计过程
• Quartus II设计 软件
– 可以用于逻辑 仿真和逻辑设 计。 – 器件编程就是 将设计结果写 入可编程逻辑 阵列芯片,相 当于布局布线。
• 在VHDL中,不仅可以对数组的整体赋值,还可以 对数组的一部分进行操作。如定义了regist_1类型 的数组信号:
TYPE regist_1 IS ARRAY (7 DOWNTO 0) OF BIT; SIGNAL arr_1, arr_2 : regist_1; – 以下的赋值操作在VHDL中都是允许的: arr_1 <= "10110110"; arr_2 <=arr_1; arr_2(0 TO 3) <="1011";
VHDL描述的基本结构
• 基本的VHDL描述由两个部分组成:实体 (entity)部分和结构体(architecture) 部分。
– 实体部分有时也称为接口(interface)部分, 主要描述一个硬件模块或系统的输入、输出接 口,包括输入、输出信号的名称,类型等。 – 结构体部分,有时也称为主体(body)部分, 是对硬件内部结构或性能的具体描述。
SDRAM控制器的VHDL实现
SDRAM控制器的VHDL实现摘要: 本文介绍了SDRAM的控制时序特点,并介绍了采用VHDL语言的状态机实现SDRAM控制器的关键技术。
关键词: SDRAM;VHDL;状态机引言SDRAM具有单位空间存储容量大和价钱便宜的优点。
但与SRAM相比SDRAM需额外的控制逻辑,因此许多应用仍然采用昂贵的SRAM。
用可编程逻辑器件实现SDRAM控制器较为复杂并对时序要求严格。
采用VHDL语言实现SDRAM 控制器直观而占用资源较少,对需要大容量存储器的应用是较经济的设计。
笔者在一项应用中采用VHDL在CPLD上实现SDRAM控制器。
成功的使SDRAM与本地处理器和PCI 控制器可靠的完成数据交换。
下面就SDRAM的时序特点和实现的关键技术作分别介绍。
SDRAM时序特点SDRAM需要正确的上电逻辑和模式设置来进入期望的工作模式。
访问特定逻辑单元必须先激活相应的存储块(BANK),并锁定对应行列地址。
另外,必须有定时的刷新逻辑保持数据不丢失。
SDRAM的控制由一些专用控制引脚和地址线辅助完成。
CS/RAS/CAS/WR在时钟上升沿的状态决定具体操作动作,地址线和BANK选择控制线在部分操作动作中作为辅助参数输入。
详细命令码请参考有关资料。
上电逻辑和模式设置SDRAM所有电源引脚必须同时加电,并且所有输入和电源引脚上电电压不得超过标称值0.3V。
加电完成后应立即对所有BANK进行预充电,然后等待200ms以避免输出总线上的数据冲突。
等待期间要求DQM和CKE保持高电平。
等待200ms以后需要发出模式寄存器设置(MRS)命令以初始化模式寄存器。
并附加的八个自动刷新周期(CBR)以保证后续操作正常。
模式寄存器设置命令使用地址线和BANK选择作为模式数据输入线。
其中A0~A2为BURST 长度,A3为寻址模式,A4~A6编码为CL值,A9为写模式。
模式寄存器的设置值必须与器件的延迟参数以及与读写操作的控制时序一致,否则将导致错误或不可靠的读写。
(十一)用LPM生成FIFO和双端口RAM5详解
ARCHITECTURE SYN OF fifo2 IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL sub_wire1 : STD_LOGIC ; COMPONENT lpm_fifo --调用LPM_FIFO声明 GENERIC (lpm_width :NATURAL; --类属 数据宽度 自然数数据类型 lpm_numwords :NATURAL; --类属 数据深度 自然数数据类型 lpm_widthu :NATURAL; --类属 地址宽度 自然数数据类型 lpm_showahead :STRING; --类属 数据读出方式 字符串数据类型 lpm_hint : STRING ); --类属 优化方式 字符串数据类型 PORT ( rdreq : IN STD_LOGIC ;
BEGIN q <= sub_wire0(7 DOWNTO 0); full <= sub_wire1;
BEGIN q <= sub_wire0(7 DOWNTO 0); full <= sub_wire1; lpm_fifo_component : lpm_fifo GENERIC MAP ( LPM_WIDTH => 8, --类属映射语句,数据宽度8位 LPM_NUMWORDS => 512, --8位字节数512个 LPM_WIDTHU => 9, --地址线位宽9位 LPM_SHOWAHEAD => "OFF", --关闭先行数据输出开关 LPM_HINT =>"USE_EAB=ON,MAXIMIZE_SPEED=5") -- 打开内部EAB,最大速度约束等级为5 PORT MAP (rdreq=>rdreq, aclr=>aclr,clock =>clock, wrreq=>wrreq, data=>data,q=>sub_wire0, full=>sub_wire1); END SYN;
EDA课程设计
EDA应用技术课程设计设计题目:基于VHDL的交织编码器设计院系:电子与信息工程学院班级:电子11-2班姓名:学号:指导教师:一、一、设计任务和要求1.任务:基于VHDL的交织编码器设计2.要求:要有完整的设计过程与代码,清楚的说明其原理二、题目分析交织编码的目的是把一个较长的突发差错离散成随机差错,再用纠正随机差错的编码(FEC)技术消除随机差错。
交织深度越大,则离散度越大,抗突发差错能力也就越强。
但交织深度越大,交织编码处理时间越长,从而造成数据传输时延增大,也就是说,交织编码是以时间为代价的。
因此,交织编码属于时间隐分集。
在实际移动通信环境下的衰落,将造成数字信号传输的突发性差错。
利用交织编码技术可离散并纠正这种突发性差错,改善移动通信的传输特性。
三、设计过程及原理1.交织编码器工作原理信道编码中采用交织技术,可打乱码字比特之间的相关性,将信道中传输过程中的成群突发错误转换为随机错误,从而提高整个通信系统的可靠性。
交织编码根据交织方式的不同,可分为线性交织、卷积交织和伪随机交织。
其中线性交织编码是一种比较常见的形式。
所谓线性交织编码器,是指把纠错编码器输出信号均匀分成m个码组,每个码组由n段数据构成,这样就构成一个n×m的矩阵。
这里把这个矩阵称为交织矩阵。
如图1所示,数据以a11,a12,…,a1n,a21,a22,…,a2n,…,aij,…,am1,am2,…,amn(i=1,2,…,m;j=1,2,…,n)的顺序进入交织矩阵,交织处理后以a11,n21,…,am1,a12,a22,…,am2,…,a1n,a2n,…,amn的顺序从交织矩阵中送出,这样就完成对数据的交织编码。
还可以按照其他顺序从交织矩阵中读出数据,不管采用哪种方式,其最终目的都是把输入数据的次序打乱。
如果aij只包含1个数据比特,称为按比特交织;如果aij包含多个数据比特,则称为按字交织。
接收端的交织译码同交织编码过程相类似。
VHDL语言简介
标准数据类型(10种)
• • • • 整数(INTERGER) 自然数(Natural)和正整数(Positive) 实数(REAL) 位(BIT) 位数据类型也属于枚举型,取值只能是‘1‘和‘0‘ • 位矢量(BIT_VECTOR) 位矢量使用双引号括起来的一组位数据,如 “1011‖。 使用位矢量时必须注明位宽,即数组中元素个数和 排列,如: SIGNAL S1:BIT_VECTOR(15 DOWNTO 0);
常数:对某一常数赋予一个固定值。
变量:在进程和子程序中使用,是一个局部量。 信号:是电路内部硬件连接的抽象。
常 数
常数说明格式为:
CONSTANT 常数名:数据类型:=表达式;
如: CONSTANT VCC:REAL:= 5.0; • 常量是一个恒定不变的量,一旦被赋值就不 能再改变。
变 量
• 变量只能在进程和子程序中使用,是一个局 部量,不能将信息带出所定义的当前设计单 元。与信号不同,变量的赋值是理想化数据 传输,其赋值是立即生效的,不存在任何延 迟。 变量定义语句的格式为:
2-2 标识符
• 短标识符(VHDL‘87)
VHDL的短标识符必须遵守以下规则:
1、必须以英文字母开头; 2、英文字母、数字(0~9)和下划线都是有效的字符; 3、短标识符不区分大小写; 4、下划线(_)的前后都必须有英文字母或数字; 如:A_1 5、不能和VHDL语言的保留字重名。
一同步FIFO的意思是说FIFO的读写时钟是同一个时钟不
一、同步FIFO的意思是说FIFO的读写时钟是同一个时钟,不同于异步FIFO,异步FIFO的读写时钟是完全异步的。
同步FIFO的对外接口包括时钟,清零,读请求,写请求,数据输入总线,数据输出总线,空以及满信号。
下面分别对同步FIFO的对外接口信号作一描述:1.时钟,输入,用于同步FIFO的读和写,上升沿有效;2.清零,输入,异步清零信号,低电平有效,该信号有效时,FIFO被清空;3.写请求,输入,低电平有效,该信号有效时,表明外部电路请求向FIFO写入数据;4.读请求,输入,低电平有效,该信号有效时,表明外部电路请求从FIFO中读取数据;5.数据输入总线,输入,当写信号有效时,数据输入总线上的数据被写入到FIFO中;6.数据输出总线,输出,当读信号有效时,数据从FIFO中被读出并放到数据输出总线上;7.空,输出,高电平有效,当该信号有效时,表明FIFO中没有任何数据,全部为空;8.满,输出,高电平有效,当该信号有效时,表明FIFO已经满了,没有空间可用来存贮数据。
使用VHDL描述的FIFO将以上面的接口为基础,并且可以参数化配置FIFO 的宽度和深度。
二、同步FIFO内部通过控制电路和RAM实现,控制电路主要包括写指针管理电路,读指针管理电路,以及FIFO状态判断电路,对于同步FIFO来讲,读和写的指针管理电路实际上就是二进制计数器。
现在的FPGA都具有Block RAM,通过VHDL描述可以对其进行调用,为了能够实现任意深度和宽度的FIFO,那么在用VHDL描述RAM的时候需要使用generic 使得RAM的调用能够参书化。
同样,对于读写指针计数器,也需要参数化的描述方法。
下面主要对FIFO的状态判断如何判断进行一些说明。
假设宽度任意而深度为8的FIFO,当读指针read_pointer和写指针write_pointer的值一样的时候,很显然,这时FIFO的状态为空。
比较麻烦的是对FIFO是否已经满的状态的判断,因为存在两种情况,第一种情况时写指针write_pointer比读指针read_pointer 大,比如writer_pointer = 7而read_pointer = 0,还有一种情况时写指针writer_pointer比读指针read_pointer小,比如writer_pointer = 2而read_pointer = 3。
双口RAM原理及应用实例PPT
双口RAM在FPGA中的实现
选用Xilinx公司的Spartan-6 FPGA器件, 基于低功耗45 nm、9-金属铜层、双栅极氧 化层工艺技术,提供高级功耗管理技术, 150 000个逻辑单元,集成式PCI Express模 块,高级存储器支持。250 MHz DSPslice和 3.125 Gb/s低功耗收发器。 通过Verilog HDL语言对双口RAM功能的 描述就能在一片FPGA器件内实现8位16字 节的双口RAM,并进行读写操作控制。双 口RAM读写操作控制采用Verilog HDL代码。
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、 GAL、CPLD等可编程器件的基础上进一步 发展的产物。它是作为专用集成电路 (ASIC)领域中的一种半定制电路而出现 的,既解决了定制电路的不足,又克服了 原有可编程器件门电路数有限的缺点。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array) 这样一个概念,内部包括可配置逻辑模块CLB (Configurable Logic Block)、输入输出模块IOB (Input Output Block)和内部连线(Interconnect) 三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传 统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比, FPGA具有不同的结构。FPGA利用小型查找表 (16×1RAM)来实现组合逻辑,每个查找表连接到一 个D触发器的输入端,触发器再来驱动其他逻辑电路或 驱动I/O,由此构成了既可实现组合逻辑功能又可实现 时序逻辑功能的基本逻辑单元模块,这些模块间利用 金属连线互相连接或连接到I/O模块。FPGA的逻辑是 通过向内部静态存储单元加载编程数据来实现的,存 储在存储器单元中的值决定了逻辑单元的逻辑功能以 及各模块之间或模块与I/O间的联接方式,并最终决定 了FPGA所能实现的功能,FPGA允许无限次的编程。
这样就可以在fpga内部实现2个双口ram了
这样就可以在fpga内部实现2个双口ram了这样就可以在fpga内部实现2个双口ram了经过斑竹的提示,修改了程序,现在就可以在fpga内部实现2个双口ram了,可以实现乒乓操作了library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_ARITH.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity dualportram isport(clk : in std_logic;--dout_1: inout std_logic_vector(7 downto 0);--dout_2: inout std_logic_vector(7 downto 0)dout : inout std_logic_vector(7 downto 0));end dualportram;architecture action of dualportram iscomponent lpmramdp_1PORT(data : IN STD_LOGIC_VECTOR (15 DOWNTO 0);wren : IN STD_LOGIC := '1';wraddress : IN STD_LOGIC_VECTOR (11 DOWNTO 0);rdaddress : IN STD_LOGIC_VECTOR (12 DOWNTO 0);clock : IN STD_LOGIC;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));end component;component lpmramdpplusPORT(data : IN STD_LOGIC_VECTOR (15 DOWNTO 0);wren : IN STD_LOGIC := '1';wraddress : IN STD_LOGIC_VECTOR (12 DOWNTO 0);rdaddress : IN STD_LOGIC_VECTOR (13 DOWNTO 0);clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );end component;signal wrCount_1 : std_logic_vector (11 DOWNTO 0);signal rdCount_1 : std_logic_vector (12 DOWNTO 0);signal dataIn_1 : std_logic_vector (15 downto 0);signal dataOut_1 : std_logic_vector (7 downto 0);signal wrCount_2 : std_logic_vector (12 DOWNTO 0);signal rdCount_2 : std_logic_vector (13 DOWNTO 0);signal dataIn_2 : std_logic_vector (15 downto 0);signal dataOut_2 : std_logic_vector (7 downto 0);signal flag:std_logic;beginprocess(clk)beginif rising_edge(clk) thenwrCount_1 <= wrCount_1 + 1;rdCount_1 <= rdCount_1 + 1;wrCount_2 <= wrCount_2 + 1;rdCount_2 <= rdCount_2 + 1;flag <= not flag;if (flag = '1') thendout <= dataOut_1;elsedout <= dataOut_2;end if;end if;end process;u1: lpmramdp_1port map(data => dataIn_1,wren => '1',wraddress => wrCount_1,rdaddress => rdCount_1,clock => clk,--q => dout_1q => dataOut_1);u2: lpmramdpplusPORT map(data => dataIn_2,wren => '1',wraddress => wrCount_2, rdaddress => rdCount_2,clock => clk,--q => dout_2q => dataOut_2);end;。
LPM模块的VHDL文本方式调用
1.4 正弦信号发生器设计与LPM ROM定制 3. LPM ROM定制
图7-23 定制LPM ROM文件
LPM模块的VHDL文本方式调用
1.4 正弦信号发生器设计与LPM ROM定制 3. LPM ROM定制
图7-24 选择ROM参数
LPM模块的VHDL文本方式调用
1.4 正弦信号发生器设计与LPM ROM定制GIC ;
q
: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0) );
END COMPONENT;
BEGIN
q <= sub_wire0(7 DOWNTO 0);
EDA技术实用教程
LPM模块的VHDL文本方式调用
1.1 AD采样系统顶层电路设计
图7-14 ADC0809采样电路系统
LPM模块的VHDL文本方式调用
1.2 编辑定制LPM_RAM模块
图7-15 生成或修改一个定制的LPM模块
1.2 编辑定制LPM_RAM模块
图7-16 用VHDL定制LPM_RAM,文件名:RAM2.vhd
LPM_ADDRESS_CONTROL => "REGISTERED",--寄存器锁存方式写入地址,字符串
数据类型
接上页 LPM_OUTDATA => "UNREGISTERED",--非寄存器锁存方式输出数据 LPM_HINT => "USE_EAB=ON" ) -–允许使用FPGA中的EAB PORT MAP (address => address,inclock => inclock,