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.pswp.cn/news/713936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713936.shtml
英文地址,請注明出處:http://en.pswp.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…