quartus prime 16.0 报警告 inferring latch
前言
当写always组合逻辑块时,可能会写出 poor code。综合时软件会推断出锁存器。例如下面代码:
always @* begin
if (c == 'b1) begin
w = (a & b) ^ c;
end
end
当c等于0的时候,w就会保持上一个值,所以就产生了锁存器,quartus就会贴心的给你报一个警告。
inferring latch(es) for signal or variable "ram", which holds its previous value in one or more paths through the process
流程:
解决方式一:
补全条件,如果用的if就补全else,用的case补全default;
解决方式二:
当你使用状态机的时候,对于各种变量条件考虑可能不全面,查bug眼泪掉下来,还有你希望保持原值但不愿看到警告(强迫症),最简单的方式就是把always组合逻辑变成always时序逻辑,毕竟FPGA是一款偏时序的器件,能用时序逻辑最好用时序逻辑。
如spi的状态机代码:(举个栗子,代码风格和代码可能都是错的)
always @(*) begin
case (cstate)
IDEL: begin
//master_din_reg = 0;
//master_dout = 0;
cs = 'b1;
wr_done = 'b0;
rd_done = 'b0;
sck_en = 'b0;
end
LOAD: begin
cs = 'b0;
master_din_reg = master_din;
end
SEND: begin
sck_en = 'b1;
end
FINISH: begin
cs = 'b1;
wr_done = 'b1;
rd_done = 'b1;
sck_en = 'b0;
master_dout = master_dout_reg;
end
default: begin
master_din_reg = ;
master_dout = ;
cs = 'b0;
wr_done = 'b0;
rd_done = 'b0;
sck_en = 'b0;
end
endcase //case
end
组合改成时序逻辑(这是对的):
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
cs <= 'b1;
data_cnt_en <= 'b0;
sck_en <= 'b0;
master_din_reg <= ;
master_dout <= ;
end
else begin
case (cstate)
IDEL: begin
data_cnt_en <= 'b0;
master_din_reg <= (wr) ? master_din : master_din_reg; //load the data you want send to slaver;
end
SEND: begin
data_cnt_en <= 'b1;
cs <= 'b0;
sck_en <= 'b1;
master_dout <= (send_over) ? master_dout_reg : master_dout; //master receiverd data;
end
FINISH: begin //send and load ok;
sck_en <= 'b0;
cs <= 'b1;
data_cnt_en <= 'b0;
end
default: begin
cs <= 'b1;
sck_en <= 'b0;
data_cnt_en <= 'b0;
end
endcase //case
end
end
以上。
quartus prime 16.0 报警告 inferring latch的更多相关文章
- Quartus prime 16.0 in_system memory content editor 使用
前言 quartus提供了片内存储器的实时查看与修改,而不用编译工程,很棒.你可以方便的查看到存储器中到底存储了什么东西. 流程 1.打开: 2.主界面: 3.设置jtag项之后,查看即可. sign ...
- Quartus prime 16.0 signaltap II 使用
前言 由于逻辑分析仪太贵,altera贴心提供signal tap II来观察输出波形,不过使能signaltap II会占用片内ram,毕竟原理就是把数据采样到ram中再通过jtag口上传到quar ...
- Quartus prime 16.0 中通过JTAG固化程序
前言 下载项目sof文件到开发板中,掉电后会消失:由于开发板有JTAG口,则可以用JTAG固化jic文件到EPCS16芯片中. 流程 1.打开quartus软件并打开convert programmi ...
- 对ChemDraw Prime 16.0你了解多少
ChemDraw Prime 16.0应用是化学智能绘图程序的行业领导者.除了创建符合出版标准的绘图,化学家们可以使用ChemDraw Prime软件预测性能,搜索数据库等来节省时间,提高数据的准确性 ...
- altera quartus 百度云分享 quartus prime 17.1 16.1 13.0
quartus prime 17.1 标准版 链接:https://pan.baidu.com/s/10QWejKdDobVxDSqnVPJ0xQ 提取码:hhvj 复制这段内容后打开百度网盘手机Ap ...
- centos7编译安装LNMP(nginx-1.16.0,mysql8.0.16,php-7.3.6)常见问题报错及解决方法
LNMP的安装与配置 nginx-1.16.0安装及配置: 第一步:前往官网下载nignx源码包 下载完毕后上传至服务器(先安装lrzsz) yum -y install lrzsz 安装完毕后执行: ...
- webpack4.0报WARNING in configuration警告
在进行webpack打包工作时,先进行如下步骤 1). 安装webpack:推荐全局命令 cnpm install webpack -g 查看webpack版本 webpack -v 2) . 此时 ...
- netcore程序部署 ubuntu 16.0.4 报错 The type initializer for 'System.Net.Http.CurlHandler'的解决方案
最近业务扩展需要把netcore程序部署到ubuntu 16.0.4上,因为代码里面用到了HttpClient 请求. 部署ubuntu后一直报错 参考地址:https://github.com/do ...
- quartus ii13.0~16.0 调用uedit (转载http://blog.sina.com.cn/s/blog_6d5560f00102vax6.html)
转自 http://blog.sina.com.cn/s/blog_6d5560f00102vax6.html Quartus II 中的文本编辑软件不好用,比较习惯与UE(Uedit32/ultra ...
随机推荐
- Django 的路由层 视图层 模板层
--------------------------------------------------------------通过苦难,走向欢乐.——贝多芬 Django-2的路由层(URLconf) ...
- Makefile有三个非常有用的变量。分别是$@,$^,$
原文地址:https://blog.csdn.net/u013774102/article/details/79043559 假设我们有下面这样的一个程序,源代码如下: /* main.c */ #i ...
- Nginx监控运维
Nginx是一个开源.免费.高性能的HTTP和反向代理服务器,也可以用于IMAP/POP3代理服务器.充分利用Nginx的特性,可以有效解决流量高并发请求.cc攻击等问题. 本文探讨了电商场景下Ngi ...
- python 中的super()继承,搜索广度为先
一.python中类的继承 1.1 单继承 在python 中我们可以这样来定义一个类:及继承它的子类 class Father: def __init__(self, mes): #1 父类的ini ...
- 修改eclipce操作权限
<dependencies> <dependency> <groupId>jdk.tools</groupId> <artifactId>j ...
- Tomcat connecttimeout sessiontimeout
IIS中的会话超时和连接超时之间有什么区别? | Adept Technologies Inc.https://www.adepttech.com/blog/?p=825 IIS中的会话超时和连接超时 ...
- 解决jenkins运行磁盘满的问题
解决jenkins运行磁盘满的问题 - ling811的专栏 - CSDN博客 https://blog.csdn.net/ling811/article/details/74991899 1.自动丢 ...
- js 精确验证身份证(地址编码、出生日期、校验位验证)
//身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 function IdentityCodeValid(code) { ::::::::::::::::: ...
- 快速理解Git结构
git pull:拉取远程服务器最新代码到本地(会自动merge) git add:将本地代码添加到暂存区 git commit:将暂存区的所有内容提交到当前分支(git会自动为我们创建第一个分支 ...
- CMake--静态库与动态库构建
小结内容 建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用, HelloFunc 向终端输出Hello World 字符串. 安装头文件与共享库. 1.代码与CMakeList ...