一....尽量不要使用"大于""小于"这样的判断语句, 这样会明显增加使用的逻辑单元数量 .看一下报告,资源使用差别很大.
例程:always@(posedge clk) begin count1=count1+1; if(count1==10000000) feng=1; //no_ring else if(count1==90000000) begin feng=0; //ring count1=0; endend //这么写会用107个逻辑单元
// 如果把这句话if(count1==10000000)改成大于小于,报告中用了135个逻辑单元
二.....一定要想尽办法减少reg寄存器的长度
上次把[30:0]改到[50:0],报告里逻辑单元从100多直升到2000多!!!太吓人了,至于为什么我就不知道了哈!
三....case语句里一定要加default if一定要加else
如果是组合逻辑的设计,不加default或else的话,不能保证所有的情况都有赋值,就会在内部形成一个锁存器,不再是一个纯粹的组合逻辑了,电路性能就会下降.
例如:case({a,b})
2'b11 e=b;
2'b10 e=a;
endcase
//不加default,虽然只关心a=1时的结果,但是a=0的时候,e就会保存原来的值,直到a变为1
//那么e要保存原来的值,就要在内部生成锁存器了.
四....尽量使用Case语句 而不是if--else语句
复杂的if--else语句通常会生成优先级译码逻辑,这将会增加这些路径上的组合时延用来产生复杂逻辑的Case语句通常会生成不会有太多时延的并行逻辑
五...组合逻辑的always块中,要注意所有的输入全部放入敏感变量表里
比如:always@(a or b)
begin
out=(a&b&c);
end
此时生成的不是纯的组合逻辑,因为当C变化时, out不会立刻发生变化(需要等到a或b变化,c的变化才会显现), 所以需要生成一个寄存器来保存C的值.
连续赋值语句的综合:从赋值语句右边提取出逻辑,用于驱动赋值语句左边的net
过程赋值语句的综合:从赋值语句右边提取出的逻辑,用于驱动赋值语句左边的reg型变量。注意:initia语句仅用于仿真,不综合。只有在always中才能被综合。
建议组合逻辑用阻塞语句,时序逻辑用非阻塞语句,任何延时控制(如#5)都被综合工具器忽略。一个模块中同一个变量不能既有阻塞赋值,又有非阻塞赋值。
always语句的综合
1对于组合逻辑,事件列表必须包括所有always语句中引用的变量,否则会造成综合的结果与设计功能不匹配。
2临时变量可以不用在事件列表中列出。
if语句的综合
特别要注意综合出锁存器。always中,某个变量没有在所有的条件分支中被赋值,就会综合出锁存器。
case语句综合
和if语句一样,不完整的case分支语句也会导致锁存器的综合。
避免方法:
1)在case语句前,对要赋值的变量赋予初值
always @ (state or a or b) begin
q =0;
case(state)
3'b000: q = A & B;
……
2)使用default分支语句
3)使用综合指令,具体用法在case关键字行的注释中插入”synthesis full_case“
并行CASE语句
通常情况下case语句和if语句一样会综合出代有优先权解码的硬件电路,从上大侠选项优先级逐渐降低。但如果设计者知道case语句中的所有项是互斥的,这时候就使用”parallel_case"综合指令。
always @(key)
case(key) //synthesis parallel_case
4'b0001: a = 0;
endcase
如何写代码减少逻辑单元的使用数量
- 代码(66456)
- 逻辑单元(5077)
相关推荐
如何写AAR记录?
''}; while(TT4_AddAAR(& aAAR)!= SUCCESS); 是否有任何smaple代码来测试AAR读/写。还有各种NDEF格式?提前致谢!RGDS,卢比#android-app #nfc#m24sr
2019-08-16 14:24:07
如何写DA转化代码
解如何写DA转化代码:s: 即startADDRESS: 即器件地址(0表示为写)A:表示等待回应CONTROL BYTE: 表示控制字(第二个发送的字节)A:表示等待回应DATE BYTE: 表示写入的电压值(注意如果写入255,其实结果是5v,以此来换算)A:表示等待回应s:
2022-02-16 07:48:44
如何写c代码才能让程序的执行效率更高?
怎样写c代码才能让程序的执行效率更高?同样结构和功能的代码,只是其中的变量的定义方式不同,但程序的执行效率却又天壤之别!能相差10倍!!!所以,想问问怎样写代码,可以让代码的执行效率更高?
2020-07-14 08:00:20
如何写一个中断函数
目录1、中断2、复位3、通用I/O及其中断:I/O寄存器I/O中断寄存器默认状态如何写一个中断函数总结所整理归纳仅做分享与记录,从自身角度分析自己身为学生曾在学习中所遇到的问题与需要特别注意的地方
2021-11-29 07:30:15
如何写入指令?
连接是没有问题的。但是我写入*AC? 时仪器报错。我看了说明还是不会如何写?所以请教1.若我要测量市电220vac要怎样写指令,仪器才可以响应测量AC的指令呢?2.附件有34401A的说明书,能否对几个典型的命令做详细的说明。3.请教一下,有没有相关如何写入指令的教程或书籍介绍。
2014-04-30 12:58:03
如何写出可以让人理解的代码(以verilog语言为例)?
如何写出可以让人理解的代码(以verilog语言为例)?1. 代码要比较好理解,最容易做到的就是把代码写短,因此在每个always语句块尽可能只处理一个信号,或者只处理一组相关度很高的信号(例如
2012-02-01 11:39:56
如何写好状态机
的硬件和逻辑工程师面试中,状态机设计几乎是必选题目。本章在引入状态机设计思 想的基础上,重点讨论如何写好状态机。 本文主要内容如下: 状态机的基本概念; 如何写好状态机; 使用 Synplify Pro 分析 FSM。[hide] [/hide]
2011-10-24 11:43:11
如何写带大缓冲区和内部中断的uart函数?
字节而不是128字节。有时也丢失了字节。在PSoC Creator好的例子中,没有使用大缓冲区的UART。请你帮助我,告诉你如何写这个函数。AuthyScB.Cyrkk.Access 02.Zip1.1兆字节
2019-10-14 10:32:36
Cyclone IV 器件的逻辑单元和逻辑阵列模块
这个章节包含了定义逻辑单元 (LE) 和逻辑阵列模块 (LAB) 的特性。具体信息体现在 LE如何运作,LAB 如何容纳 LE 组,以及 LAB 接口如何与 Cyclone® IV 器件中的其他模块连接。
2017-11-13 11:25:48
DSP C6713用McBSP0中的中断程序向FPGA发数据代码咋写?
大家好:DSP C6713用McBSP0中的中断程序向FPGA发数据,或者向CE0写数据,(注意:发送数据用EMIF,接收用McBSP0)C语言代码该如何写?紧急多谢!
2020-07-29 09:29:38
FPGA实战演练逻辑篇45:减少关键路径的逻辑等级
减少关键路径的逻辑等级本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt 下面要列举的代码示例是一些能够起到
2015-07-02 22:17:18
STC90C58AD自带AD程序如何写?
STC90C58AD自带AD程序如何写?1、初始化哪些指令?2、如何设置?3、如何采集及送到LCD屏16284希望高手都来指点下!
2013-01-07 11:14:09
USET模块的数量突然减少到只有两个
我有一个当前的项目,目录中列出的USET模块的数量突然减少到只有两个。有什么想法吗? 以上来自于百度翻译 以下为原文I have a current project and suddenly
2019-03-21 09:26:00
[求助] 关于如何写模块化的程序?
reg52.h的重复定义。这是我第一次尝试写模块化程序,不知道各个.h文件和.c文件开头怎么写,我是参照一个模板写的,但编译还是出错,请各位大侠指出错误,教小弟如何写模块化程序。能不能把我的程序改一下传给我,或者您给我传一份可以正确编译的模块化程序,让我参考参考,在此谢谢过了!
2013-01-01 19:17:58
[求助] 关于如何写模块化的程序?
reg52.h的重复定义。这是我第一次尝试写模块化程序,不知道各个.h文件和.c文件开头怎么写,我是参照一个模板写的,但编译还是出错,请各位大侠指出错误,教小弟如何写模块化程序。能不能把我的程序改一下传给我,或者您给我传一份可以正确编译的模块化程序,让我参考参考,在此谢谢过了!
2013-01-01 19:20:53
[求助] 关于如何写模块化的程序?
reg52.h的重复定义。这是我第一次尝试写模块化程序,不知道各个.h文件和.c文件开头怎么写,我是参照一个模板写的,但编译还是出错,请各位大侠指出错误,教小弟如何写模块化程序。能不能把我的程序改一下传给我,或者您给我传一份可以正确编译的模块化程序,让我参考参考,在此谢谢过了!
2013-01-01 20:13:36
[求助] 关于如何写模块化的程序?
reg52.h的重复定义。这是我第一次尝试写模块化程序,不知道各个.h文件和.c文件开头怎么写,我是参照一个模板写的,但编译还是出错,请各位大侠指出错误,教小弟如何写模块化程序。能不能把我的程序改一下传给我,或者您给我传一份可以正确编译的模块化程序,让我参考参考,在此谢谢过了!
2013-01-01 20:15:05
fpga逻辑资源
;"小于"这样的判断语句, 这样会明显增加使用的逻辑单元数量 .看一下报告,资源使用差别很大.例程:always@(posedge clk)begincount1=count1+1
2018-03-24 11:04:41
msp430g2553定时一秒的程序如何写(没有外部晶振)
``msp430g2553开发板在没有外部晶振的情况下,如何写定时一秒的程序??想用12864做个电子钟,但不能准确定时一秒,希望大家帮帮忙``
2014-05-01 19:49:13
什么是Modbus协议?如何写稳定的Modbus代码?
什么是Modbus协议?Modbus协议有哪些分类?使用Modbus时有哪些注意事项?如何写稳定的Modbus代码?
2021-07-02 06:54:34
关于如何写模块化的程序?
定义。这是我第一次尝试写模块化程序,不知道各个.h文件和.c文件开头怎么写,我是参照一个模板写的,但编译还是出错,请各位大侠指出错误,教小弟如何写模块化程序,不胜感激!!!
2012-12-30 15:51:55
基于rdk 4.1 单独编译ko文件,如何写make?
本帖最后由 人间烟火123 于 2018-6-15 11:45 编辑
请教下专家们我用的IPNC rdk 4.1编写了一个自己的驱动,我想把它单独编译成一个ko文件,如何写make?
2018-06-15 01:16:41
如何在LUT和逻辑元件之间以及逻辑元件和逻辑单元之间进行交换
嗨,我目前正在对设计进行初步分析。我正在研究关于实现不同功能所需资源的不同FPGA。我找不到一种方法来将设计使用的LUT数量相关联,并将其转换为virtex和spartan范围的逻辑单元格。如果可能
2019-01-08 10:18:36
我在以前的代码基础上,又加入部分的代码,逻辑单元使用量竟然减少了,求告知
我在以前的代码基础上,又加入部分的代码。加入的部分代码只是为了增加部分的新功能(原来的代码没有改动),编辑后逻辑单元使用量竟然比原代码的使用量减少了,求告知使用语言: verilog环境: quartusii芯片: CPLDAltera
2016-08-13 09:40:24
数字逻辑功能单元
数字逻辑功能单元数字逻辑最终是需要通过数字电路的形式来实现的缓冲门:是仅具有缓冲功能的基本门电路,仅有一个输入端口,也仅有一个输出端口功能:将输入端口的信号电平原封不动地搬移到输出端口,输入为0
2021-07-29 08:04:47
是否可以使用逻辑单元的verilog代码?
我想知道我是否可以使用逻辑单元(Spartan 6)的verilog代码,这样我就不必花时间为逻辑单元编写verilog代码。这可以节省我的时间,让我专注于其他部分内容,因为我有一个很短的时间来完成
2020-03-10 09:45:39
求助。ssrp主板。如何写程序。有赏服务。
求助。ssrp主板。如何写程序。有赏服务。我有一个维基站,在国内可以用。拿到加拿大,频率不一样,需要更新程序。有会的大牛吗。有赏服务。***微信同号。
2021-08-19 08:19:19
特殊命令转码用labview如何写呢?
23 DBCD 11)发送给MCU。比如,原命令是16位hex命令包,转码完后会变成18位的命令包,这样的情况,用labview如何写呢?有个大体思路,是先拆分数据,然后一位一位比较,若遇到特殊数据就转码,最后把这些比较完的数据再合成。用for循环,实在是写不出来,请大神帮想想法子。
2019-08-29 23:25:15
蓝桥杯中模块相应代码该如何写
本文不说底层原理,只说蓝桥杯中模块相应代码该如何写,一定要自己敲出来,测试出相应的结果。模块练熟了再去敲往年的赛题,毕竟九尺之台,起于累土main主函数部分,这个把各个模块融合在一起,可以最后再看
2022-01-12 07:06:30
解析一下普通的Io按键驱动如何写和实现
,解析一下普通的Io按键驱动如何写和实现,如果有大神看出有错误的东西,请指教。此篇作为学习和交流之用。谢谢大家。 首先普通的io 口按键来说的话,主要分为两种情况,一种是低推...
2021-12-10 08:13:03
请教一个关于U盘逻辑单元设置的问题?
我在获取最大逻辑单元时返回了01, 按理说应该有两个盘符啊,怎么只有一个呢,奇怪。枚举都成功了有大侠帮忙指点指点,谢了!如图所示: 2013-3-25 17:30 上传下载附件 (907.61 KB) 逻辑单元返回值为1
2013-03-26 16:18:21
请问CAN中断接收的初始化、接收部分代码如何写?
请教一下各位:在TL2515_CAN例程中,CAN接收采用查询方式,能不能提示一下CAN中断接收的初始化、接收部分代码如何写?
2020-05-20 07:17:30
请问CC2530多对1要如何写?
, pTxData, APP_PAYLOAD_LENGTH)的RECEIVE_ADDR 可以决定哪一个接收端但如果是多对1 要如何写,因为在1对1裡 接收端的程式好像没有
2018-06-01 02:04:55
请问STM32F103如何写捕获的中断回调函数
项目需要用同一个定时器的两个输入捕获通道,现在分配的是TIM1 的CH3 和CH4,芯片为 STM32F103C8T6,用CUBEMX生成的代码,现在不知如何写捕获的中断回调函数。有谁能给个基于HAL的例子吗?万分感谢!
2018-11-19 08:46:05
请问vivado如何减少BRAM瓦片这一数量?如何操作?
嗨,我的设计在合成中使用141.5 BRAM瓦片。但是,在Zynq中可以使用140 BRAM瓦片。实施后,这个数量下降到133瓦。我的问题是vivado如何减少这一数量?实施?这点可以导致未来
2018-10-31 16:17:40
请问“逻辑单元”的意思是什么?
我想知道“逻辑单元”的意思..我知道“Block RAM”,“分布式RAM”“CLB”......以及ETC ..但是,我不知道“Logic Cell”..请让我知道..谢谢!
2019-11-08 16:38:38
请问有多少门数等于1个逻辑单元?
嗨朋友们, 我想知道在Virtex 5 LX110中有多少门数等于1个逻辑单元?此外,从逻辑单元计算栅极数量的公式也是必须的。请尽快发给我。还要把附件文件和我的问题的答案一起发给我。再见,MUTHU
2020-05-28 17:18:52
请问这种情况在c语言里面该如何写啊?
用的ads1231, 其测量正电压值范围0-0.5VREF/128,我取参考电压2.5V这样电压值voltage=AD_DATA*0.009765625/83886077fffff=8388607这个在c 语言里面该如何写啊??这样子写恐怕是不好处理的啊
2019-06-12 08:18:13
如何写好状态机
如何写好状态机:状态机是逻辑设计的重要内容,状态机的设计水平直接反应工程师的逻辑功底,所以许多公司的硬件和逻辑工程师面试中,状态机设计几乎是必选题目。本章在引入
2009-06-14 19:24:4996
数字电路的基本逻辑单元—门电路
内容提要: 本章系统地介绍数字电路的基本逻辑单元门电路,及其对应的逻辑运算与图形描述符号,并针对实际应用介绍了三态逻辑门和集电极开路输出门,最后简要介绍TTL集成门和CMOS集成门的逻辑功能、外特性
2017-10-26 17:27:599
可配置逻辑单元(CLC)
本视频介绍了可配置逻辑单元(CLC),该灵活外设可用于整合片上和片外逻辑信号,用来产生不同的输出值,可以在多种条件下将器件从低功耗休眠模式唤醒。嵌入式设计人员还可以利用时序逻辑特性开发简单的状态机,而无需CPU干预。此外,CLC还具有系统信号互连与路由功能,包括时钟源、片外事件和外设输出或中断信号。
2018-06-07 02:46:004224
如何写一个简短的Python代码做一个换脸程序的详细概述
在这篇文章中将介绍如何写一个简短(200行)的 Python 脚本,来自动地将一幅图片的脸替换为另一幅图片的脸。
2018-07-09 10:48:474198
一文详解xilinx CLB基本逻辑单元
CLB是xilinx基本逻辑单元,每个CLB包含两个slices,每个slices由4个(A,B,C,D)6输入LUT和8个寄存器组成。
2022-04-24 14:48:553407
详解逻辑单元的内部结构
逻辑单元(Logic Element,LE)在FPGA器件内部,用于完成用户逻辑的最小单元。一个逻辑阵列包含16个逻辑单元以及一些其他资源, 在一个逻辑阵列内部的16个逻辑单元有更为紧密的联系,可以实现特有的功能。
2022-06-15 16:50:212604
评论
查看更多