91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

VHDL與Verilog硬件描述語言如何用TestBench來進(jìn)行仿真

FPGA設(shè)計論壇 ? 來源:博客園 ? 作者:The Pisces ? 2021-08-04 14:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

VHDL與Verilog硬件描述語言在數(shù)字電路的設(shè)計中使用的非常普遍,無論是哪種語言,仿真都是必不可少的。而且隨著設(shè)計復(fù)雜度的提高,仿真工具的重要性就越來越凸顯出來。在一些小的設(shè)計中,用TestBench來進(jìn)行仿真是一個很不錯的選擇。

VHDL與Verilog語言的語法規(guī)則不同,它們的TestBench的具體寫法也不同,但是應(yīng)包含的基本結(jié)構(gòu)大體相似,在VHDL的仿真文件中應(yīng)包含以下幾點:實體和結(jié)構(gòu)體聲明、信號聲明、頂層設(shè)計實例化、提供激勵;Verilog的仿真文件應(yīng)包括:模塊聲明、信號聲明、頂層設(shè)計實例化、提供激勵。大致思想都是相似的。

簡單的說,TestBench就是一種驗證手段,從軟件層面對設(shè)計的硬件電路進(jìn)行仿真。具體來講,一般是在你的仿真文件里,產(chǎn)生激勵信號,作用于被仿真的設(shè)計文件DUT(Design Under Test),產(chǎn)生相應(yīng)的輸出,然后根據(jù)輸出信號檢驗設(shè)計的電路是否存在問題或者存在哪些問題。

下面以FPGA板中驅(qū)動流水燈的一段程序為例,簡單介紹一下兩種語言的TestBench的編寫。

1 module led_run(clk,rst,led);

2 input clk,rst;

3 output reg [7:0] led;

4 reg [25:0] clk_cnt;

5 reg clk_tmp;

6 reg [3:0] temp;

7

8 always@(posedge clk or negedge rst)

9 begin

10 if(!rst)

11 begin

12 clk_cnt《=26‘d0;

13 clk_tmp《=1’b1;

14 end

15 else

16 begin

17 if(clk_cnt==26‘b11111111111111111111111111)

18 begin

19 clk_cnt《=26’d0;

20 clk_tmp《=~clk_tmp;

21 end

22 else

23 clk_cnt《=clk_cnt+1‘b1;

24 end

25 end

26

27 always@(posedge clk_tmp or negedge rst)

28 begin

29 if(!rst)

30 temp《=4’d15;

31 else

32 temp《=temp+1‘b1;

33 end

34

35 always@(temp)

36 begin

37 case(temp)

38 4’d0 :led《=8‘b11111110;

39 4’d1 :led《=8‘b11111100;

40 4’d2 :led《=8‘b11111000;

41 4’d3 :led《=8‘b11110000;

42 4’d4 :led《=8‘b11100000;

43 4’d5 :led《=8‘b11000000;

44 4’d6 :led《=8‘b10000000;

45 4’d7 :led《=8‘b00000000;

46 4’d8 :led《=8‘b00000001;

47 4’d9 :led《=8‘b00000011;

48 4’d10:led《=8‘b00000111;

49 4’d11:led《=8‘b00001111;

50 4’d12:led《=8‘b00011111;

51 4’d13:led《=8‘b00111111;

52 4’d14:led《=8‘b01111111;

53 4’d15:led《=8‘b11111111;

54 default:;

55 endcase

56 end

57

58 endmodule

上面是一段流水燈的代碼,控制8位流水燈依次點亮,再依次熄滅。第一個always語句完成分頻功能,第二個always語句用于計數(shù),共16個值,第三個always語句根據(jù)計數(shù)的值選擇LED燈的狀態(tài)。其中clk、rst分別為時鐘和復(fù)位信號,led為驅(qū)動流水燈的輸出信號。接下來針對這一設(shè)計編寫其TestBench文件。

1 /************TestBench*************/

2 module tb_led_run;

3 reg clk,rst;

4 wire led;

5

6 initial

7 begin

8 rst=1;

9 #30 rst=0;

10 #40 rst=1;

11 end

12

13 initial

14 begin

15 clk=1;

16 forever #20 clk=~clk;

17 end

18

19 led_run led1(.clk(clk),.rst(rst),.led(led));

20 endmodule

由于只需要時鐘和復(fù)位信號即可,故在其仿真文件并不復(fù)雜,建立測試模塊,進(jìn)行信號聲明,在兩個initial中分別提供clk和rst信號,最后進(jìn)行例化。當(dāng)然注意一點,在仿真時要把分頻模塊去掉,或者將分頻系數(shù)改小,否則仿真時不容易觀察波形。下面是在Modelsim中仿真得到的波形(分頻模塊改為2分頻)。

總結(jié)起來,Verilog的TestBench有著相對固定的寫法:

module test_bench;

端口聲明語句

initial

begin

產(chǎn)生時鐘信號

end

initial

begin

提供激勵源

end

例化語句

endmodule

最主要的是在initial語句中進(jìn)行激勵的生成,這要根據(jù)具體的設(shè)計來分析。

下面對比介紹VHDL語言TestBench的寫法。同樣的功能,驅(qū)動流水燈,VHDL的程序如下:

1 LIBRARY IEEE;

2 USE IEEE.STD_LOGIC_1164.ALL;

3 USE IEEE.STD_LOGIC_UNSIGNED.ALL;

5 ENTITY led_run IS

6 PORT(clk:in std_logic;

7 rst:in std_logic;

8 led:out std_logic_vector(7 downto 0):=“11111111” );

9 END led_run;

10

11 ARCHITECTURE arc_led_run OF led_run IS

12 signal temp:std_logic_vector(3 downto 0);

13 signal clk_cnt:std_logic_vector(25 downto 0);

14 signal clk_tmp:std_logic:=’1‘;

15 BEGIN

16 divider:PROCESS(clk,rst)

17 BEGIN

18 if(rst=’0‘) then

19 clk_cnt《=“00000000000000000000000000”;

20 elsif(clk’event and clk=‘1’) then

21 clk_cnt《=clk_cnt+1;

22 if(clk_cnt=“11111111111111111111111111”) then

23 clk_cnt《=“00000000000000000000000000”;

24 clk_tmp《=NOT clk_tmp;

25 end if;

26 end if;

27 END PROCESS;

28

29 PROCESS(clk_tmp,rst)

30 BEGIN

31 if(rst=‘0’) then

32 temp《=“1111”; --all the led off

33 elsif(clk_tmp‘event and clk_tmp=’1‘) then

34 temp《=temp+1;

35 end if;

36 END PROCESS;

37

38 PROCESS(temp)

39 BEGIN

40 case temp is

41 when“0000”=》led《=“11111110”;

42 when“0001”=》led《=“11111100”;

43 when“0010”=》led《=“11111000”;

44 when“0011”=》led《=“11110000”;

45 when“0100”=》led《=“11100000”;

46 when“0101”=》led《=“11000000”;

47 when“0110”=》led《=“10000000”;

48 when“0111”=》led《=“00000000”;

49 when“1000”=》led《=“00000001”;

50 when“1001”=》led《=“00000011”;

51 when“1010”=》led《=“00000111”;

52 when“1011”=》led《=“00001111”;

53 when“1100”=》led《=“00011111”;

54 when“1101”=》led《=“00111111”;

55 when“1110”=》led《=“01111111”;

56 when“1111”=》led《=“11111111”;

57 when others=》NULL;

58 end case;

59 END PROCESS;

60

61 END arc_led_run;

根據(jù)語法要求,首先聲明庫,接著定義實體和結(jié)構(gòu)體。在結(jié)構(gòu)體中用三個進(jìn)程(PROCESS)分別實現(xiàn)分頻、計數(shù)、流水燈狀態(tài)分配的功能,功能相當(dāng)于上面Verilog程序中的三個always語句。接下來寫TestBench文件:

1 ---------------TestBench-----------------

2 LIBRARY IEEE;

3 USE IEEE.STD_LOGIC_1164.ALL;

4

5

6 ENTITY tb_led_run IS --空實體

7 END tb_led_run;

8

9

10 ARCHITECTURE arc_tb_led_run OF tb_led_run IS --結(jié)構(gòu)體

11

12 COMPONENT led_run IS --元件聲明

13 PORT(clk:in std_logic;

14 rst:in std_logic;

15 led:out std_logic_vector(7 downto 0));

16 END COMPONENT;

17

18 signal clk,rst:std_logic;

19 signal led:std_logic_vector(7 downto 0);

20 constant clk_period:time:=5 ns;

21

22 BEGIN

23

24 DUT:led_run PORT MAP(clk=》clk,rst=》rst,led=》led); --元件例化

25

26 clk_gen:PROCESS

27 BEGIN

28 clk《=’1‘;

29 wait for clk_period/2;

30 clk《=’0‘;

31 wait for clk_period/2;

32 END PROCESS;

33

34 tb:PROCESS

35 BEGIN

36 rst《=’0‘;

37 wait for 12 ns;

38 rst《=’1‘;

39 wait;

40 END PROCESS;

41

42 END arc_tb_led_run;

在這個TestBench中同樣只需要提供clk和rst信號,分別在兩個進(jìn)程實現(xiàn),Modelsim中的仿真結(jié)果如下(同樣在仿真的時候?qū)⒎诸l系數(shù)改為2):

總結(jié)一下,VHDL的TestBench寫法也有相對固定的格式:

library ieee; --庫聲明

use ieee.std_logic_1164.all;

entity test_bench is --測試平臺文件的空實體(不需要端口定義)

end test_bench;

architecture tb_behavior of test_bench is --結(jié)構(gòu)體

component entity_under_test --被測試元件的聲明

port(

list-of-ports-theri-types-and-modes

);

end component;

begin

instantiation:entity_under_test port map --元件例化

port-associations

);

process() --產(chǎn)生時鐘信號

……

end process;

process() --產(chǎn)生激勵源

……

end process;

end tb_behavior;

相對與Verilog語言來說,VHDL的TestBench除了自身的庫聲明以及Entity和Architecture之外,還需要進(jìn)行元件的聲明,即將被測試的設(shè)計聲明為一個元件,然后對其例化。在激勵的產(chǎn)生方面與Verilog思路相同。

從上面的程序可以看出,Verilog語言相對比較隨意一些,從C語言編程中繼承了多種操作符和結(jié)構(gòu);而VHDL的語法則比較嚴(yán)謹(jǐn),有固定的格式。但在功能的實現(xiàn)上二者大同小異。比如Verilog中的always語句,在VHDL中可以找到PROCESS與之對應(yīng),當(dāng)然更多的是不同。

兩種語言均可在不同的抽象層次對電路進(jìn)行描述:系統(tǒng)級、算法級、寄存器傳輸級、邏輯門級和開關(guān)電路級,但是VHDL更擅長系統(tǒng)級,而Verilog更方便底層描述。在學(xué)習(xí)硬件描述語言的時候不妨對比學(xué)習(xí)一下,相信會對電路設(shè)計的理解更加深一層。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    822

    瀏覽量

    131678

原文標(biāo)題:VHDL與Verilog硬件描述語言TestBench的編寫

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于FPGA VHDL的FSK調(diào)制與解調(diào)設(shè)計

    VHDL誕生于1982年。在1987年底,VHDL被IEEE和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。
    的頭像 發(fā)表于 01-27 10:58 ?322次閱讀
    基于FPGA <b class='flag-5'>VHDL</b>的FSK調(diào)制與解調(diào)設(shè)計

    FPGA 入門必看:VerilogVHDL 編程基礎(chǔ)解析!

    很多開發(fā)者第一次接觸FPGA,都會有同樣的疑問:FPGA是硬件,不是軟件,怎么寫程序?答案就是用硬件描述語言(HDL),最常用的就是Verilog
    的頭像 發(fā)表于 01-19 09:05 ?442次閱讀
    FPGA 入門必看:<b class='flag-5'>Verilog</b> 與 <b class='flag-5'>VHDL</b> 編程基礎(chǔ)解析!

    如何使用Modelsim仿真I2C控制器

    ModelSim是Model Technology(Mentor Graphics的子公司)的HDL硬件描述語言仿真軟件。該軟件可以用來實現(xiàn)對設(shè)計的VHDL
    的頭像 發(fā)表于 01-10 14:14 ?5307次閱讀
    如何使用Modelsim<b class='flag-5'>仿真</b>I2C控制器

    【產(chǎn)品介紹】Modelsim:HDL語言仿真軟件

    概述ModelSim是業(yè)界最優(yōu)秀的HDL語言仿真軟件,它能提供友好的仿真環(huán)境,是業(yè)界唯一的單內(nèi)核支持VHDLVerilog混合
    的頭像 發(fā)表于 11-13 11:41 ?493次閱讀
    【產(chǎn)品介紹】Modelsim:HDL<b class='flag-5'>語言</b><b class='flag-5'>仿真</b>軟件

    verilog testbench中運行測試用例時,運行到make run_test出錯怎么解決?

    按照胡老師書上的在verilog testbench中運行測試用例時,在運行到make run_test步驟時出錯,查了很多方案沒有解決。
    發(fā)表于 11-11 06:52

    利用 NucleiStudio IDE 和 vivado 進(jìn)行硬件聯(lián)合仿真

    本文利用NucleiStudio IDE 和 vivado 對 NICE demo協(xié)處理器進(jìn)行硬件聯(lián)合仿真。 1. 下載demo_nice例程:https://github.com
    發(fā)表于 11-05 13:56

    求助,關(guān)于testbench仿真的問題求解

    我用c 寫了一段加密算法,其中包含了S盒替換表和密鑰等參數(shù),現(xiàn)在想用vcs和testbench仿真這個程序,c 編譯成機器碼后怎么區(qū)分哪段數(shù)據(jù)是寫入ITCM哪段是寫入DTCM的,又應(yīng)該怎么寫入DTCM
    發(fā)表于 11-05 08:56

    使用NucleiStudio生成tb仿真需要的.verilog文件

    打開仿真頂層文件tb_top.v,存放在ITCM模塊里面的指令是通過readmemh函數(shù)讀入.verilog文件實現(xiàn)的: 下面通過對NucleiStudio IDE進(jìn)行設(shè)置,實現(xiàn)將c
    發(fā)表于 11-05 07:07

    復(fù)雜的軟件算法硬件IP核的實現(xiàn)

    模型,它是從傳統(tǒng)的計算機匯編語言演變而來,同時它是支持指令集級的并行執(zhí)行。可以認(rèn)為 HASM 是一種比 VHDLVerilog 稍微高級一點的硬件
    發(fā)表于 10-30 07:02

    語法糾錯和testbench的自動生成

    ,每次跑仿真都需要修改語法錯誤;另外在寫完一個模塊之后,每次跑仿真前都需要搭建testbench,模塊的實例化,這顯然是很麻煩的,查閱資料發(fā)現(xiàn)vscode有插件可以解決上述問題,故
    發(fā)表于 10-27 07:07

    CICC2033:關(guān)于C語言仿真的一些說明

    C語言運行說明 操作說明(以helloworld為例) 1、在SDK環(huán)境下寫好C語言相關(guān)代碼。 最簡單的寫法為根據(jù)已有demo進(jìn)行更改。如果說需要重新創(chuàng)建新的SDK項目,具體寫法可以參考官
    發(fā)表于 10-21 14:18

    為什么我選擇VHDL入門

    篇。 從長期來看,兩個語言大概率都要學(xué)一下;但是從初學(xué)角度而言,總要選擇一個入門語言。 根據(jù)網(wǎng)上的信息,總結(jié)對比結(jié)論: Verilog 的優(yōu)勢: 1. Verilog 語法接近C,學(xué)習(xí)
    的頭像 發(fā)表于 06-25 11:18 ?1199次閱讀
    為什么我選擇<b class='flag-5'>VHDL</b>入門

    FPGA Verilog HDL語法之編譯預(yù)處理

    Verilog HDL語言和C語言一樣也提供了編譯預(yù)處理的功能。“編譯預(yù)處理”是Verilog HDL編譯系統(tǒng)的一個組成部分。Verilog
    的頭像 發(fā)表于 03-27 13:30 ?1426次閱讀
    FPGA <b class='flag-5'>Verilog</b> HDL語法之編譯預(yù)處理

    一文詳解Verilog HDL

    Verilog HDL(Hardware Description Language)是一種硬件描述語言,用于從算法級、門級到開關(guān)級的多種抽象設(shè)計層次的數(shù)字系統(tǒng)建?!,F(xiàn)實生活中多用于專用集成電路
    的頭像 發(fā)表于 03-17 15:17 ?4288次閱讀
    一文詳解<b class='flag-5'>Verilog</b> HDL

    千兆網(wǎng)絡(luò)PHY芯片RTL8211E的實踐應(yīng)用

    以太網(wǎng)MAC模塊負(fù)責(zé)實現(xiàn)以太網(wǎng)MAC子層的功能,完成802.3ab的數(shù)據(jù)封裝與解封。其同時負(fù)責(zé)適配硬件PHY的物理接口,組成物理層的通訊接口; 硬件系統(tǒng)的功能可以通過 Verilog HDL
    的頭像 發(fā)表于 03-17 13:56 ?8965次閱讀
    千兆網(wǎng)絡(luò)PHY芯片RTL8211E的實踐應(yīng)用