ISE verilog 综合错误提示:ERROR:Xst:880 - "Johnson_source.v" line 45: Cannot mix blocking and non blocking

本文针对Xilinx FPGA开发中使用Verilog HDL语言时遇到的混合使用阻塞与非阻塞赋值的问题进行了解析。指出在always模块内不应同时使用=和<=赋值符号,并提供了排查此问题的方法。

背景:Xilinx公司的FPGA  ,ISE 13.4 开发环境,  verilog HDL语言

问题描述:检查语法没有错误,但综合时出错,错误如下:

 ERROR:Xst:880 - "Johnson_source.v" line 45: Cannot mix blocking and non blocking assignments on signal <key_n_r1>.


此类错误主要是在

always
begin
end
里的程序即有阻塞性赋值也有非阻塞性赋值(就是即有= 又有<=)。检查一下就可以排除。

Verilog HDL中,模块实例化时如果出现错误提示 `Error (10267): Verilog HDL Module Instantiation error at <file>(<line>): cannot connect instance ports both by order and by name`,通常是因为在同一模块实例化过程中混合使用了**按顺序连接端口**和**按名称连接端口**的方式。这种冲突会导致编译器无法正确解析端口映射,从而报错。 ### 错误原因分析 Verilog允许两种方式来连接模块实例的端口: 1. **按顺序连接(Positional Connection)**:按照模块定义中的端口顺序依次连接信号。 ```verilog mod_a instance1 (out1, out2, in1, in2, in3, in4); ``` 2. **按名称连接(Named Connection)**:通过显式指定端口名称与信号之间的映射关系进行连接。 ```verilog mod_a instance1 ( .out1(out1), .out2(out2), .in1(in1), .in2(in2), .in3(in3), .in4(in4) ); ``` 一旦在一个实例化语句中同时使用这两种方式,例如: ```verilog mod_a instance1 (out1, .in1(in1), .in2(in2), .in3(in3), .in4(in4)); ``` 编译器会报出 `cannot connect instance ports both by order and by name` 的错误。 ### 解决方法 1. **统一使用一种连接方式**: - 如果选择**按顺序连接**,请确保所有端口都按模块声明中的顺序排列,不使用`.`语法。 - 如果选择**按名称连接**,则应为每个端口显式指定名称,并用括号包裹。 2. **检查多余的逗号或遗漏的点号**: - 在按名称连接时,若不小心在`.port(signal)`前多加了逗号,如 `.port(,signal)`,会导致语法错误[^2]。 - 同样地,在按名称连接时忘记加`.`,也会导致编译器混淆连接方式[^1]。 3. **确认顶层模块一致性**: - 如果工程设置中顶层模块名称与实际例化的模块不一致,也可能引发其他错误,影响编译流程。请确保将正确的文件设置为顶层模块[^1]。 4. **示例修复后的代码**: 假设有一个模块 `mod_a` 定义如下: ```verilog module mod_a ( output out1, output out2, input in1, input in2, input in3, input in4 ); // 模块内容 endmodule ``` 正确的实例化方式可以是: ```verilog module top_module ( input a, input b, input c, input d, output out1, output out2 ); mod_a name ( .out1(out1), .out2(out2), .in1(a), .in2(b), .in3(c), .in4(d) ); endmodule ``` 或者仅使用位置连接(不推荐,尤其当端口较多时易出错): ```verilog mod_a name (out1, out2, a, b, c, d); ``` ### 总结 避免该错误的关键在于**保持模块实例化时端口连接方式的一致性**,并仔细检查语法是否正确,尤其是在复制粘贴代码时容易引入额外的符号(如多余的逗号或缺失的点号)。此外,确保顶层模块设置正确,有助于减少不必要的工程配置错误---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值