当前位置: 首页 > news >正文

Verilog参数、Verilog参数和属性冲突、整数处理

Verilog参数

Verilog参数执行以下操作:

•允许您创建易于重用和扩展的参数化代码。

•使代码更可读、更紧凑、更易于维护。

•将此类功能描述为:

○ 总线尺寸

○ 建模设计单元中某些重复元素的数量

•是常数。对于参数化模块的每个实例化,默认运算符值可以被覆盖。

•相当于VHDL泛型。不支持空字符串参数。

使用Generics命令行选项重新定义在顶级中定义的Verilog参数设计块。这允许您在不修改源代码的情况下修改设计。这该功能对IP核心生成和流测试非常有用。

参数示例(Verilog)

从编码示例下载编码示例文件。

Filename: parameter_1.v
// A Verilog parameter allows to control the width of an instantitated
// block describing register logic
//
//
// File:parameter_1.v
//
module myreg (clk, clken, d, q);
parameter SIZE = 1;
input clk, clken;
input [SIZE-1:0] d;
output reg [SIZE-1:0] q;
always @(posedge clk)
begin
if (clken)
q <= d;
end
endmodule
module parameter_1 (clk, clken, di, do);
parameter SIZE = 8;
input clk, clken;
input [SIZE-1:0] di;
output [SIZE-1:0] do;
myreg #8 inst_reg (clk, clken, di, do);
endmodule

参数和生成示例(Verilog)

以下编码示例说明了如何使用控制重复元素的创建参数并为构造生成。有关详细信息,请参阅生成语句。

文件名:parameter_generate_for_1.v

//
// A shift register description that illustrates the use of parameters and
// generate-for constructs in Verilog
//
// File: parameter_generate_for_1.v
//
module parameter_generate_for_1 (clk, si, so);
parameter SIZE = 8;
input clk;
input si;
output so;
reg [0:SIZE-1] s;
assign so = s[SIZE-1];
always @ (posedge clk)
s[0] <= si;
genvar i;
generate
for (i = 1; i < SIZE; i = i+1)
begin : shreg
always @ (posedge clk)
begin
s[i] <= s[i-1];
end
end
endgenerate
endmodule

Verilog参数和属性冲突

Verilog参数和属性冲突可能是由于以下原因引起的:

•参数和属性可以应用于Verilog代码中的实例和模块。

•属性也可以在约束文件中指定。

Verilog使用限制

Vivado合成中的Verilog使用限制包括以下内容:

•区分大小写

•阻塞和非阻塞分配

•整数处理

区分大小写

Vivado synthesis支持Verilog区分大小写,尽管存在名称冲突的可能性。

•由于Verilog区分大小写,因此模块、实例和信号的名称可以理论上通过改变资本化而变得独特。

○ Vivado合成可以合成实例和信号名称仅相差资本化。

○ 当模块名称仅因大写而不同时,Vivado合成会出错。

•不要仅依靠大写来使对象名称唯一。单独的资本化可以导致混合语言项目出现问题。

阻塞和非阻塞分配

Vivado合成支持阻塞和非阻塞分配。

•请勿混合分配阻塞和非阻塞。

•尽管Vivado合成在没有错误的情况下合成了设计,但混合阻塞和非阻塞分配可能会在模拟过程中导致错误。有关Vivado模拟的Verilog格式的更多信息,请参阅Vivado设计套件用户指南:逻辑仿真(UG900)。

不可接受的示例一

不要对同一信号的不同比特混合块和非块分配。

always @(in1)
begin
if (in2)
out1 = in1;
end else
out1 <= in2;
Unacceptable Example Two
Do not mix blocking and non-blocking assignments for different bits of the same signal.
if (in2)
begin
out1[0] = 1'b0;
out1[1] <= in1;
end else begin
out1[0] = in2;
out1[1] <= 1'b1;
end

整数处理

Vivado合成在某些情况下处理整数的方式与其他合成工具不同。在里面在这些情况下,整数必须以特定的方式进行编码。

Verilog案例语句中的整数处理

不带大小写的整数,以防项表达式可能导致不可预测的结果。Verilog案例语句中的整数处理示例在下面的编码示例中,事例项表达式4是一个未大小的整数,它导致不可预测的结果。要解决此问题,请将事例项表达式的大小调整为4到3位,如中所示以下示例:

reg [2:0] condition1; always @(condition1) begin
case(condition1)
4 : data_out = 2; // Generates faulty logic
3'd4 : data_out = 2; // Does work
endcase
end

连接中的整数处理

Verilog串联中的无符号整数可能会导致不可预测的结果。如果您使用表达式,它会执行以下操作:

•将表达式指定给临时信号。

•在级联中使用临时信号。

reg [31:0] temp;
assign temp = 4'b1111 % 2;
assign dout = {12/3,temp,din};

Verilog-2001属性和元评论

Verilog-2001属性

•Verilog-2001属性将特定信息传递给合成工具等程序。

•Verilog-2001属性被普遍接受。

•在模块声明中,为运算符或信号的任何位置指定Verilog-2001属性和实例化。

•尽管编译器可能支持其他属性声明,但Vivado synthesis会忽略他们

•使用Verilog-2001属性设置以下方面的约束:

○ 单个对象,例如:

单元

例子

○ 设置以下合成约束:

-完整案例

-平行案例

Verilog元注释

•Verilog元注释可由Verilog解析器理解。

•Verilog元注释设置了对单个对象的约束,例如:

○ 单元

○ 例子

○ 网

•Verilog元注释设置合成指令:

○ 并行(_C)和完全(_C

○ translate_on和translate_off

○ 所有特定于工具的指令(例如,syn_shareing)

Verilog元评论支持

Vivado合成支持:

•C风格和Verilog风格的元评论:

○ C样式

/* ...*/

•C型注释可以是多行:

○ Verilog风格

// ...

Verilog风格的注释在行的末尾。

•关闭和打开翻译

// synthesis translate_on
// synthesis translate_off
• Parallel Case
// synthesis parallel_case full_case
// synthesis parallel_case
// synthesis full_case
• Constraints on individual objects
Verilog Meta Comment Syntax
// synthesis attribute [of] ObjectName [is] AttributeValue
Verilog Meta Comment Syntax Examples
// synthesis attribute RLOC of u123 is R11C1.S0
// synthesis attribute HUSET u1 MY_SET
// synthesis attribute fsm_extract of State2 is "yes"
// synthesis attribute fsm_encoding of State2 is "gray"

相关文章:

  • 【ArcPy】简化ArcGISPro默认Python环境体量
  • YOLOv8从入门到入土使用教程!(二)目标预测
  • QT使用FFMPEG库开发视频播放器
  • 惠普 DsekJet GT 5810/5820常见问题及解决方法
  • 低代码平台开发——基于React(文末送书)
  • MySQL相关问题
  • NLP_文本特征处理_4(代码示例)
  • 初级软件测试面试题
  • 计算机组成原理-第四章 指令系统【期末复习|考研复习】
  • Python与HTTP服务交互
  • Unix Network Programming Episode 88
  • Python 运算符介绍
  • 将预测的分割结果可视化
  • [前端][死循环]问题发现[easyui]
  • git操作基本指令
  • 【译】JS基础算法脚本:字符串结尾
  • JavaScript-如何实现克隆(clone)函数
  • 《深入 React 技术栈》
  • CSS实用技巧
  • css属性的继承、初识值、计算值、当前值、应用值
  • Fundebug计费标准解释:事件数是如何定义的?
  • Javascript编码规范
  • Java超时控制的实现
  • js学习笔记
  • k8s 面向应用开发者的基础命令
  • leetcode-27. Remove Element
  • Magento 1.x 中文订单打印乱码
  • magento 货币换算
  • Markdown 语法简单说明
  • Quartz初级教程
  • Redis中的lru算法实现
  • Terraform入门 - 1. 安装Terraform
  • Windows Containers 大冒险: 容器网络
  • 汉诺塔算法
  • 基于axios的vue插件,让http请求更简单
  • 简单数学运算程序(不定期更新)
  • 如何学习JavaEE,项目又该如何做?
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 学习笔记:对象,原型和继承(1)
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Spring第一个helloWorld
  • # 达梦数据库知识点
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #QT(智能家居界面-界面切换)
  • #每日一题合集#牛客JZ23-JZ33
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (八)c52学习之旅-中断实验
  • (二)fiber的基本认识
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)原始图像数据和PDF中的图像数据
  • .net MySql