cpld

FPGA/CPLD状态机稳定性研究

☆樱花仙子☆ 提交于 2020-02-19 19:45:33
摘要 在FPGA/CPLD设计中频繁使用的状态机,常出现一些稳定性问题,本文提出了一些解决方法,实验表明该方法有效地提高了综合效率.   随着大规模和超大规模FPGA/CPLD器件的诞生和发展,以HDL(硬件描述语言)为工具、FPGA/CPLD器件为载体的EDA技术的应用越来越广泛.从小型电子系统到大规模SOC(Systemonachip)设计,已经无处不在.在FPGA/CPLD设计中,状态机是最典型、应用最广泛的时序电路模块,如何设计一个稳定可靠的状态机是我们必须面对的问题. 1、状态机的特点和常见问题 标准状态机分为摩尔(Moore)状态机和米立(Mealy)状态机两类.Moore状态机的输出仅与当前状态值有关,且只在时钟边沿到来时才会有状态变化.Mealy状态机的输出不仅与当前状态值有关,而且与当前输入值有关,这一特点使其控制和输出更加灵活,但同时也增加了设计复杂程度.其原理如图1所示.   根据图1所示,很容易理解状态机的结构.但是为什么要使用状态机而不使用一般时序电路呢?这是因为它具有一些一般时序电路无法比拟的优点. 用VHDL描述的状态机结构分明,易读,易懂,易排错; 相对其它时序电路而言,状态机更加稳定,运行模式类似于CPU,易于实现顺序控制等. 用VHDL语言描述状态机属于一种高层次建模,结果经常出现一些出乎设计者意外的情况: 在两个状态转换时,出现过渡状态.

XILINX FPGA和CPLD引脚约束

夙愿已清 提交于 2020-02-11 01:13:26
XILINX FPGA和CPLD管教约束 1、XILINX CPLD引脚配置 打开ISE,这个工程所用的芯片是Coolrunner II CPLD系列的XC2C32A,找到floorplan IO-Pre-Synthesis 双击打开之后出现下图,显示了引脚的各种约束状态,这些引脚约束当然是与你的编程代码是一致的:例如:你的Verilog代码中的时钟信号,肯定是输入信号,所以时钟引脚肯定得配置成input。 2、FPGA的引脚约束 这是spanrtan6系列的XC6SLX4,打开ISE出现以下界面,找到 IO Pin Planning(PlanAhead)-Post-Systhesis, 双击打开出现下图:最下面的表格栏对应各种约束,可以仔细配置引脚。 谢谢! 来源: CSDN 作者: TianMa行空 链接: https://blog.csdn.net/weixin_43166304/article/details/104253117

推荐几个EDA网站

喜夏-厌秋 提交于 2020-01-06 03:09:16
http://www.cnblogs.com/jianyungsun/archive/2011/05/12/2044898.html 1. OPENCORES.ORG 这里提供非常多,非常好的PLD了内核,8051内核就可以在里面找到。 进入后,选择project或者由http// www.opencores.org/browse.cgi/by_category 进入。 http://www.opencores.org/polls.cgi/list OpenCores is a loose collection of people who are interested in developing hardware, with a similar ethos to the free software movement. Currently the emphasis is on digital modules called ''cores'', since FPGAs have reduced the incremental cost of a core to approximately zero. Activity is centered around the opencores web site http://www.opencores.org - 中文 2. FPGAs are

AG272 CPLD

安稳与你 提交于 2020-01-01 17:31:04
AG272 CPLD是低成本CPLD。这种即时,非易失性CPLD系列针对通用和低密度逻辑。逻辑密度为272个带有LQFP-100封装的逻辑元件。 低成本低功耗CPLD 即时,非易失性标准兼容体系结构。 全局时钟网络中最多有4条全局时钟线驱动整个设备。 提供可编程的快速传播延迟和时钟至输出时间。 为每个器件提供PLL,时钟乘法和相移。 UFM支持高达256 Kbit的非易失性存储。 支持3.3V,2.5V,1.8V和1.5V逻辑电平 可编程压摆率,驱动强度,总线保持,可编程上拉电阻,漏极开路输出,施密特触发器和可编程输入延迟。 内置联合测试行动小组(JTAG)边界扫描测试(BST)电路,符合IEEE标准。1149.1-1990 符合IEEE标准的ISP电路。1532 3.3V,2.5V,1.8V,1.5V LVCMOS和LVTTL标准 模拟LVDS输出(LVDS_E_3R) 模拟的RSDS输出(RSDS_E_3R) 来源: CSDN 作者: Embeded_FPGA 链接: https://blog.csdn.net/Embeded_FPGA/article/details/103793264

利用CPLD MAX3000系列EPM3064ALC44-10设计数字钟

匿名 (未验证) 提交于 2019-12-02 23:45:01
//实现二分频 module div2(cin,cout); input cin; output cout; reg cout; always@(posedge cin) begin cout<=~cout; end endmodule //十进制计数器 module counter10(rst,clk,dout,cout); input clk,rst; output cout; output[3:0] dout; reg cout; reg[3:0] dout; always@(posedge clk or posedge rst) begin if(rst) begin dout<=0; cout<=0; end else begin if(dout==4'd9) begin dout<=0; cout<=1; end else begin cout<=0; dout<=dout+1; end end end endmodule //六进制计数器 module counter6(rst,clk,dout,cout); input clk,rst; output cout; output[2:0] dout; reg cout; reg[3:0] dout; always@(posedge clk or posedge rst) begin if(rst) begin dout

基于FPGA/CPLD设计与实现UART

ⅰ亾dé卋堺 提交于 2019-11-28 02:38:10
http://hi.baidu.com/hieda/blog/item/750eac88fcf5d790a5c2727e.html - 基于FPGA/CPLD设计与实现UART -- 摘 要:UART是广泛使用的串行数据通讯电路。本设计包含UART发送器、接收器和波特率发生器。设计应用EDA技术,基于FPGA/CPLD器件设计与实现UART。 关键词:FPGA/CPLD;UART;VHDL UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。 --- 串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文应用EDA技术,基于FPGA/CPLD器件设计与实现UART。 一 UART简介 1 UART结构 --- UART主要有由数据总线接口、控制逻辑、波特率发生器

MAX6299MTT在CPLD上的应用

[亡魂溺海] 提交于 2019-11-27 07:41:26
MAX6299MTT在CPLD上的应用 1. MAX6299MTT的资料可以翻阅其datasheet. 2. 信号的时序逻辑设计 3. 电路的焊接,SO上最好加一上拉电阻(33K),3.3V,耦合电容(0.1u) 070625 : 第一版完成,可以得到CS,SCK信号,由于传感器还没到位,所以还不能检测SO信号,sign信号。 070627 : 鉴于传感器还没有到位,准备加入2路开关,用来尝试做下实验。 一路(暂定为红)按下,使之初始化输出数据为25度; 另一路(暂定为灰)按下,使之输出传感器的数据。 07062 8 : 传感器到后,遇到了一系列的问题,不过前面已经有同事用VHDL做过LM95071温度传感器的数据读写。所以在参考她的基础上,进展还算顺利。 首先是数据的乱显示,这个在把程序结构调整后,就不再出现。不过两位数码管自此始终显示“00”。 然后尝试着手动输入25度的二进制码,显示“25”没问题。 用CPLD的其他引脚得到输出,发觉始终为低,这也就是为什么始终显示“00”的原因了。应该是没有输出。然后用调试引脚放到程序的各个地方,看其显示,发现是if判断语句的问题,想当然的以为datacount会到达0,但其实只到1就停止,大概是SCK下降沿在无意中由于延时的原因被吃掉了一个。不过由于最后两位数据为不定,不需要。所以也就不影响读值了(到现在的原因解释,未必正确)。