国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數字硬件建模SystemVerilog

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-07-14 09:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

數字硬件建模SystemVerilog-使用結構體和聯合體的例子

使用結構體和聯合體的例子

結構體和聯合體可以包括壓縮或非壓縮數組,壓縮結構體或聯合體只能包括壓縮數組。

9f480000-030d-11ed-ba43-dac502259ad0.png

壓縮和非壓縮的數組可以將結構體和聯合體作為元素包含在數組中。在壓縮數組中,結構體或聯合體也必須是壓縮的。

9f6813fe-030d-11ed-ba43-dac502259ad0.png

數組可以包含自定義結構體和自定義聯合體。綜合支持數組中的壓縮或非壓縮結構體。

示例4-8說明了如何使用結構體數組,該示例是一個指令寄存器模型,其中包含32條指令的非壓縮數組,每條指令是一個復合值,表示為壓縮結構體。指令中的操作數可以是有符號的或無符號的,表示為兩種類型的聯合體。

該指令寄存器的輸入包括單獨的操作數、一個操作碼和一個指示操作數是有符號的還是無符號的標志。該模型將這些單獨的輸入值加載到指令寄存器陣列中。一種寫入指針輸入控件,用于加載數據。該模型的輸出是單個指令結構體,使用讀指針輸入從指令寄存器中選擇。

本例使用了前面示例4-6中所示的相同包項。

示例4-6:包含結構體和聯合體定義的包

//
//Packagewithunionandstructuredefinitions
//
//`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
`define_4bit//use4-bitdatafortestingsynthesis
//`define_32bit//use32-bitdatawordsize
//`define_64bit//use64-bitdatawordsize
packagedefinitions_pkg;
`ifdef_4bit
typedeflogic[3:0]uword_t;
typedeflogicsigned[3:0]sword_t;
`elsif_64bit
typedeflogic[63:0]uword_t;
typedeflogicsigned[63:0]sword_t;
`else//defaultis32-bitvectors
typedeflogic[31:0]uword_t;
typedeflogicsigned[31:0]sword_t;
`endif

typedefenumlogic[2:0]{ADD,SUB,MULT,DIV}op_t;
typedefenumlogic{UNSIGNED,SIGNED}operand_type_t;

//Packedunionrepresentsavariablethatcanstore
//differenttypes
typedefunionpacked{
uword_tu_data;
sword_ts_data;
}data_t;

//Packedstructurerepresentsacollectionofvariables
//thatcanreferencedandpassedthroughportsasagroup
typedefstructpacked{
op_topcode;
operand_type_top_type;
data_top_a;
data_top_b;
}instruction_t;
endpackage:definitions_pkg
//`end_keywords
示例4-8:使用結構體數組對指令寄存器建模
//`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
moduleinstruction_register
importdefinitions_pkg::*;//wildcardimportthepackage
(inputlogicclk,rstN,load_en,
inputdata_top_a,
inputdata_top_b,
inputoperand_type_top_type,
inputop_topcode,
inputlogic[4:0]write_pointer,
inputlogic[4:0]read_pointer,
outputinstruction_tiw
);
timeunit1ns;timeprecision1ns;

instruction_tiw_reg[0:31];//arrayofstructures

//writetotheregisterarray
always_ff@(posedgeclkornegedgerstN)//asyncreset
if(!rstN)begin//active-lowreset
foreach(iw_reg[i])
iw_reg[i]<=?'{opcode:ADD,default:0};?//?reset?values
???end?
???else?if?(load_en)?begin?
?????case?(op_type)
???????SIGNED:???iw_reg[write_pointer]?<=?
???????????????????'{opcode,op_type,op_a.s_data,op_b.s_data};
???????UNSIGNED:?iw_reg[write_pointer]?<=
???????????????????'{opcode,op_type,op_a.u_data,op_b.u_data};
?????endcase?
???end?
?//?read?from?the?register?array
?assign?iw?=?iw_reg[read_pointer];

endmodule:?instruction_register
//`end_keywords?

圖4-5顯示了綜合該示例的結果。說明了如何使用結構體和聯合體、數組來建模大量設計功能,只需很少的代碼。示意圖右上角的矩形符號是綜合編譯器選擇報告的通用RAM的實例(在RTL模型中數組的存儲。)綜合編譯器將在綜合的最后一步將該通用RAM作為一個或多個同步存儲設備來實現,其中通用門級功能映射到特定的ASICFPGA設備。

圖4-5:示例4-8的綜合結果:帶結構體的指令寄存器 9f773e92-030d-11ed-ba43-dac502259ad0.png

附錄-TestBench

//`begin_keywords"1800-2012"
moduletest
importdefinitions_pkg::*;
(inputlogictest_clk,
outputlogicload_en,
outputlogicrstN,
outputdata_top_a,
outputdata_top_b,
outputop_topcode,
outputoperand_type_top_type,
outputlogic[4:0]write_pointer,
outputlogic[4:0]read_pointer,
inputinstruction_tiw
);

timeunit1ns;timeprecision1ns;

intseed=555;

initialbegin
$display("
Resetingtheinstructionregister...");
write_pointer=5'h00;//initializewritepointer
read_pointer=5'h1F;//initializereadpointer
load_en=1'b0;//initializeloadcontrolline
rstN<=?1'b0;????????????//?assert?rstN?(active?low)
????repeat?(2)?@(posedge?test_clk)?;??//?hold?in?reset?for?2?clk?cycles
????rstN???????????=?1'b1;????????????//?deassert?reset_n?(active?low)

????$display("
Writing?values?to?register?stack...");
????op_type?????=?SIGNED;
????op_a.s_data?=??3;
????op_b.s_data?=?-5;
????opcode??????=?ADD;
????load_en?????=?1'b1;??//?enable?writing?to?register
????@(posedge?test_clk)?;
????for?(int?i=0;?i<=2;?i++)?begin
??????write_pointer?=?i;
??????$display("Writing?to?register?location?%0d:?",?write_pointer);
??????$display("??opcode?=?%0d?(%s)",?opcode,?opcode.name);
??????$display("??op_type?=?%0d?(%s)",?op_type,?op_type.name);
??????if?(op_type?==?SIGNED)?begin
????????$display("??op_a.s_data?=?%0d",???op_a.s_data);
????????$display("??op_b.s_data?=?%0d
",?op_b.s_data);
??????end?else?begin
????????$display("??op_a.s_data?=?%0d",???op_a.u_data);
????????$display("??op_b.s_data?=?%0d
",?op_b.u_data);
??????end
??????@(negedge?test_clk)?;
??????op_a++;
??????op_b--;
??????opcode?=?op_t'(opcode?+?1);
??????op_type?=?op_type.next;
????end
????load_en?=?1'b0;??//?turn-off?writing?to?register

????//?read?back?and?display?same?three?register?locations
????$display("
Reading?back?the?same?register?locations?written...");
????for?(int?i=0;?i<=2;?i++)?begin
??????@(posedge?test_clk)?read_pointer?=?i;
??????@(negedge?test_clk)?;
??????$display("Read?from?register?location?%0d:?",?read_pointer);
??????$display("??iw.opcode?=?%0d?(%s)",?iw.opcode,?iw.opcode.name);
??????$display("??iw.op_type?=?%0d?(%s)",?iw.op_type,?iw.op_type.name);
??????if?(iw.op_type?==?SIGNED)?begin
????????$display("??iw.op_a.s_data?=?%0d",???iw.op_a.s_data);
????????$display("??iw.op_b.s_data?=?%0d
",?iw.op_b.s_data);
??????end?else?begin
????????$display("??iw.op_a.s_data?=?%0d",???iw.op_a.u_data);
????????$display("??iw.op_b.s_data?=?%0d
",?iw.op_b.u_data);
??????end
????end
????@(posedge?test_clk)?$finish;
??end
endmodule:?test

module?top;
??timeunit?1ns;?timeprecision?1ns;

??import?definitions_pkg::*;

??logic??????????clk;
??logic??????????test_clk;
??logic??????????rstN;
??logic??????????load_en;
??logic??????????reset_n;
??op_t???????????opcode;
??operand_type_t?op_type;
??data_t?????????op_a,?op_b;
??logic?[4:0]????write_pointer,?read_pointer;
??instruction_t??iw;

??test?????????????????test?(.*);
??instruction_register?dut??(.*);

??initial?begin
????clk?<=?0;
????forever?#5??clk?=?~clk;
??end

??initial?begin
????test_clk?<=0;
????//?offset?test_clk?edges?from?clk?to?prevent?races?between
????//?the?testbench?and?the?design
????#4?forever?begin
??????#2ns?test_clk?=?1'b1;
??????#8ns?test_clk?=?1'b0;
????end
??end
endmodule:?top
//`end_keywords


9f9e21a6-030d-11ed-ba43-dac502259ad0.jpg

SystemVerilog-聯合體(union)

9fb5691a-030d-11ed-ba43-dac502259ad0.jpg

SystemVerilog-結構體(二)

9fc124b2-030d-11ed-ba43-dac502259ad0.jpg

原文標題:SystemVerilog-使用結構體和聯合體的例子

文章出處:【微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭靜

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5608

    瀏覽量

    130001
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94779
  • 硬件
    +關注

    關注

    11

    文章

    3595

    瀏覽量

    69020

原文標題:SystemVerilog-使用結構體和聯合體的例子

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    飛騰主板和龍芯主板成為數字時代發展的堅實硬件

    數字浪潮席卷千行百業,從智能制造的無人車間到智慧交通的調度中樞,從能源監控的遠程終端到政務服務的自助設備,每一個數字化場景的穩定運行,都離不開核心硬件的支撐。
    的頭像 發表于 01-05 11:41 ?305次閱讀
    飛騰主板和龍芯主板成為<b class='flag-5'>數字</b>時代發展的堅實<b class='flag-5'>硬件</b>

    技術資訊 I 多板系統 3D 建模,提升設計精度和性能

    本文要點了解3D建模流程。洞悉多板系統3D建模如何提高設計精度、性能和成本效益。掌握3D建模在制造工藝中的優勢。在PCBA領域,仿真與建模是實現精準高效設計的基石。在量產前構建并復用原
    的頭像 發表于 11-21 17:45 ?2519次閱讀
    技術資訊 I 多板系統 3D <b class='flag-5'>建模</b>,提升設計精度和性能

    雷達系統中數字下變頻的實現

    本次設計同樣是通過在simulink搭建模型并通過matlab仿真得到正確設計后生成IP核的形式來實現數字下變頻的功能。
    的頭像 發表于 08-30 14:29 ?1384次閱讀
    雷達系統中<b class='flag-5'>數字</b>下變頻的實現

    如何利用三維建模加速FCB-CR8530的定制化開發?案例與工具詳解

    領域。然而,傳統開發流程中,硬件設計、結構驗證與軟件調試往往需要多次迭代,導致周期長、成本高。三維建模技術的引入,為FCB-CR8530的定制化開發提供了全新路徑,通過數字化仿真與快速驗證,顯著提升了開發效率。 一、三維
    的頭像 發表于 07-22 16:14 ?599次閱讀

    行業案例:杰和科技為智慧教育構建數字硬件底座

    杰和科技以桌面云終端、數字媒體播放器、SDM模組和工業主板為硬件支撐,數字化信息管理和邊緣存儲管理等軟件技術為輔,構建智慧教育數字化底座,幫助客戶完成智慧教育升級改造,滿足各場景下的用
    的頭像 發表于 07-17 13:36 ?487次閱讀
    行業案例:杰和科技為智慧教育構建<b class='flag-5'>數字</b>化<b class='flag-5'>硬件</b>底座

    Simcenter STAR-CCM+多相CFD仿真:自信對復雜的工業多相應用精確建模

    優勢對復雜的工業多相系統進行建模,無需進行廣泛的幾何體簡化以高保真度進行多相應用仿真使用基于可用資源的出色多相建模技術獲得精確結果摘要在實現可持續未來的激烈競爭中,新產品設計必須考慮到環境
    的頭像 發表于 06-18 15:32 ?1064次閱讀
    Simcenter STAR-CCM+多相CFD仿真:自信對復雜的工業多相應用精確<b class='flag-5'>建模</b>

    VirtualLab Fusion應用:多反射系統的非序列建模

    非序列光學系統,特別是那些非序列性來自組件內部多次內部反射的系統,具有一系列特定的挑戰。將這樣的系統分解成一個順序等價的系統通常非常不方便,而且總是不切實際的。因此,擁有一個穩定的非序列建模策略
    發表于 06-12 08:49

    VirtualLab Fusion應用:Herriott池的建模

    。Herriott單元是這種系統的一個例子,其特點是使用兩個球面反射鏡,在其中一個球面反射鏡上鉆一個離軸孔,以允許光束進出。鏡子的曲率改變了光束的方向并控制了它的發散。在此用例中,我們用光學建模和設計軟件
    發表于 06-11 08:52

    利用MATLAB對交流電機調速系統進行建模和仿真

    是借助計算機及相關技術,對真實系統的運行過程和狀態進行數字化模擬的技術。Simulink作為MATLAB的一個組件,能夠實現對動態系統的建模、仿真和綜合分析。本文在Simulink環境中建立面向電氣
    發表于 06-06 14:31

    SOLIDWORKS建模秘籍——必學的五個草圖與建模技巧

    SOLIDWORKS作為一款功能強大的三維CAD軟件,廣泛應用于各種設計和產品開發領域。掌握SOLIDWORKS的草圖與建模技巧,能夠顯著提升設計效率,減少錯誤,并快速將創意轉化為現實。以下是五個必學的SOLIDWORKS草圖與建模技巧,幫助你成為設計高手。
    的頭像 發表于 05-26 13:17 ?1186次閱讀
    SOLIDWORKS<b class='flag-5'>建模</b>秘籍——必學的五個草圖與<b class='flag-5'>建模</b>技巧

    索尼FCB-ER8530:三維建模與視覺感知的跨界融合

    數字化浪潮中,三維建模技術正重塑工業設計、文化遺產保護與智慧城市管理等領域,而索尼FCB-ER8530一體化攝像機模組憑借其4K超高清成像與智能感知能力,成為這一進程中的關鍵硬件支撐。 三維
    的頭像 發表于 05-19 17:30 ?611次閱讀

    VirtualLab應用:傅科刀口測試的建模

    。 建模任務 系統構建模塊——拋物面鏡 系統構建模塊 – 球面鏡 系統構建塊 – 光闌 系統構建模塊——理想準直透鏡 系統中應用了理想化的透鏡功能,以確保刀口后視場的準直。
    發表于 04-26 10:37

    基于VT系統的MCU硬件在環建模與仿真應用分析

    在新能源汽車行業快速發展的背景下,電機控制器(MCU)作為核心部件,其開發和測試的重要性日益增加。為了在開發早期階段快速驗證應用層算法功能及基礎軟件質量,硬件在環(HIL)測試技術應運而生。本文分析
    的頭像 發表于 04-16 10:07 ?1416次閱讀
    基于VT系統的MCU<b class='flag-5'>硬件</b>在環<b class='flag-5'>建模</b>與仿真應用分析

    概倫電子先進器件建模平臺BSIMProPlus介紹

    BSIMProPlus是一款技術先進的半導體器件SPICE模型建模平臺,在其多年的產品歷史中一直保持在半導體行業SPICE建模市場和技術的領先地位,被眾多集成電路制造和設計公司采用作為標準SPICE建模工具。
    的頭像 發表于 04-16 09:03 ?1764次閱讀
    概倫電子先進器件<b class='flag-5'>建模</b>平臺BSIMProPlus介紹

    VirtualLab Fusion應用:漸變折射率(GRIN)鏡頭的建模

    摘要 折射率平滑變化的漸變折射率(GRIN)介質可用于例如:使鏡頭表面平坦或減少像差。 VirtualLab Fusion為光通過GRIN介質的傳播提供了一種物理光學建模技術。在相同的速度下
    發表于 03-18 08:57