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"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/713936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑桌面便签哪个好,好用的电脑桌面便签推荐

在如今信息爆炸的时代&#xff0c;人们的工作和生活节奏越来越快&#xff0c;记事和备忘变得尤为重要。而电脑桌面便签作为一种方便快捷的记录工具&#xff0c;备受广大用户青睐。那么&#xff0c;电脑桌面便签哪个好&#xff0c;哪个更加出色呢&#xff1f; 作为一名人事专员…

CryoEM - 使用 cryoSPARC 基于单颗粒图像从头重构蛋白质三维结构

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136384544 基于冷冻电镜单颗粒图像重构蛋白质三维结构,利用冷冻电镜技术测定生物大分子结构的方法。原理是从冷冻电镜获得大量同一种蛋白质分子的二维投影图…

【数据结构】实现队列

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解队列&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 队列的概念及结构二. 队列的实现队列的结构体初始化销毁队尾插入队头删除显示第一个节点的值…

【Java程序员面试专栏 算法思维】六 高频面试算法题:动态规划

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊回溯算法,主要就是排列组合问题,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间零钱兑换动态规划+双重循环dp[i]表示兑换金额为i元的最少…

从0开始学习NEON(0)

1、前言 ​ 最近在学习NEON指令集&#xff0c;主要学习"单指令流&#xff0c;多数据流"的编程方式&#xff0c;在这之前主要是针对cuda编程进行学习。最近的一部分工作转移到了arm主板上&#xff0c;接触到了 ncnn这个开源项目&#xff0c;不得不佩服nihui的强大。在…

C# 线性插值

线性插值是一种常用的插值算法&#xff0c;适用于许多实际场景。 传感器数据处理&#xff1a;在传感器数据处理中&#xff0c;可能会出现数据点不连续或不均匀的情况。使用线性插值可以根据已知的数据点来估算在两个数据点之间的数值&#xff0c;从而填补数据中的缺失或不连续之…

iOS消息转发流程

当向Objc对象发送消息时&#xff0c;如果找到对象对应的方法&#xff0c;就会进入消息转发流程&#xff0c;给开发者提供一些最后的机会处理消息无法发送问题&#xff0c;以免出现程序崩溃。 1. 回调对象的resolveInstanceMethod方法&#xff0c;在这个方法中&#xff0c;允许开…

阿里云定价_ECS产品价格_云服务器收费标准 - 阿里云官方活动

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

logo设计软件及网站汇总

文章目录 一、智能设计logo的网站二、常用的logo设计软件 一、智能设计logo的网站 Canva&#xff1a;Canva是一个在线设计平台&#xff0c;提供了丰富的模板和设计工具&#xff0c;可以帮助用户轻松设计出专业水平的logo。 DesignEvo&#xff1a;DesignEvo是一个专业的在线log…

基于 LLaMA 和 LangChain 实践本地 AI 知识库

有时候,我难免不由地感慨,真实的人类世界,本就是一个巨大的娱乐圈,即使是在英雄辈出的 IT 行业。数日前,Google 正式对外发布了 Gemini 1.5 Pro,一个建立在 Transformer 和 MoE 架构上的多模态模型。可惜,这个被 Google 寄予厚望的产品并未激起多少水花,因为就在同一天…

动作生成学习笔记

目录 ReMoDiffus 检索和扩散 文字生运动 action生运动 ReMoDiffus 检索和扩散 ICCV 2023 | 重塑人体动作生成,融合扩散模型与检索策略的新范式ReMoDiffuse来了,根据文本生成动作 有例子和模型&

CSS 显示隐藏动画(动画失效问题)

就像这个动画一样的效果&#xff0c;div 先是隐藏的&#xff0c;点击按钮后显示并且有动画效果&#xff0c;隐藏的时候同样。 <button class"btn" id"btn">点击</button><div class"box" id"box"></div><s…

一些常用到的git命令

git stash -a //缓存所有文件 git checkout -b dev origin/dev //切换到dev分支上,接着跟远程的origin地址上的dev分支关联起来 //推送本地分支到远程仓库 git push origin localbranchname:remotebrancname git revert onefile //https://www.freecodecamp.org/news/git-re…

S2---FPGA-A7板级原理图硬件实战

视频链接 FPGA-A7板级系统硬件实战01_哔哩哔哩_bilibili FPGA-A7板级原理图硬件实战 基于XC7A100TFGG484的FPGA硬件设计流程图 A7核心板&#xff0c;是基于XILINX公司的ARTIX-7系列100T的XC7A100T,2FGG484I这款芯片开发的高性能核心板&#xff0c;具有高速&#xff0c;高带宽&a…

HashMap在多线程下形成环的死锁详解

1. HashMap的工作原理 HashMap是Java中基于哈希表的Map接口的非同步实现。它存储键值对&#xff0c;并允许使用null键和null值。HashMap通过使用键对象的hashCode()方法来决定键值对的存储位置。 2. 多线程环境下的问题 在多线程环境下&#xff0c;如果多个线程同时对HashMap进…

Android 签名机制

V1是内部文件单个签 但是增加apk文件目录下面随意增加文件并不会有影响,它只关心meta-info文件 mf汇总清单的各个文件sha256 V2 整个APK文件,按文件进行hash 那么便不能随便在这里面增加文件了,增加了签名分块&#xff08;不然签名信息存哪里&#xff09;这里涉及一个文件概念 …

如何修炼成“神医”——《OceanBase诊断系列》之一

本系列是基于OcenaBase 开发工程师在工作中的一些诊断经验&#xff0c;也欢迎大家分享相关经验。 1. 关于神医的故事 扁鹊&#xff0c;中国古代第一个被正史记载的医生&#xff0c;他的成才之路非常传奇。年轻时&#xff0c;扁鹊是一家客栈的主管。有一位名叫长桑君的客人来到…

性能优化篇(二) 静态合批步骤与所有注意事项\游戏运行时使用代码启动静态合批

静态合批步骤: 1.开启Project Settings —>Player–>Other Setting里勾选Static Batching选项(一般情况下unity都是默认勾选状态) 2.勾选需要合批的静态物体上的Batching Static项,勾选后此物体下的所有子物体都默认参与静态合批(勾选后物体不能进行移动/旋转/缩放操作,…

02-设计概述

上一篇&#xff1a;01-导言 本章重点讨论 JNI 中的主要设计问题。本节中的大多数设计问题都与本地方法有关。调用 API 的设计将在第 5 章&#xff1a;调用 API 中介绍。 2.1 JNI 接口函数和指针 本地代码通过调用 JNI 函数来访问 Java 虚拟机功能。JNI 函数可通过接口指针使用…

LeetCode383. 赎金信(C++)

LeetCode383. 赎金信 题目链接代码 题目链接 https://leetcode.cn/problems/ransom-note/description/ 代码 class Solution { public:bool canConstruct(string ransomNote, string magazine) {int record[26] {0};if(ransomNote.size() > magazine.size()) return fa…