網頁版的svn怎樣同步代碼_學會使用Hdlbits網頁版Verilog代碼仿真驗證平臺

大家推薦一款網頁版的 Verilog代碼編輯仿真驗證平臺,這個平臺是國外的一家開源FPGA學習網站,通過

“https://hdlbits.01xz.net/wiki/Main_Page”

地址鏈接進入網頁,在該網頁上可以進行Verilog代碼的編寫、綜合,而且最后還能夠仿真出波形來驗證設計代碼的正確性,該驗證平臺是基于Icarus Verilog(簡稱iVerilog,比較著名的開源HDL仿真工具,也有對應的安裝版本)的,讓你隨時隨地只需登錄網頁就能夠享受Verilog編程仿真的樂趣!

一、官方模板演示

1、首先打開

“https://hdlbits.01xz.net/wiki/Main_Page”,

打開后的界面如下圖所示,全英文顯示。如果感覺自己的英文水平欠佳,可以使用谷歌瀏覽器打開該網頁,并選擇在線翻譯功能,翻譯的正確率還是很高的。

4941ab8572b926cb02a25978d9a98019.png

2、點擊Simulation下的 ”Run a Simulation(lcarus Verilog)“。

8f3d02079f047af19faac12e0b035b37.png

3、打開后的界面如下圖所示,代碼編輯框中給出了一個簡單的例子。

?188cc5638fecce4bd96dc5128a928db1.png

4、點擊下面的“Submit(new window)“在新界面中進行仿真。

ac8c9b075926f1ea7503577e7e19d1fa.png?

5、在新打開的界面中我們可以看到編譯的信息和仿真波形圖。

?90eeba4546be12ad1245b03c3dcabacd.png

二、實例演示

雖然看完了官方的模板演示,但我們要想立刻仿真驗證自己設計的代碼并不是那么容易,需要進行一番摸索。下面就是大家進行一個呼吸燈的設計實例演示。

1、學習過FPGA的朋友都知道要想對FPGA邏輯進行仿真一定要具備兩個文件,一個是RTL代碼文件,用來綜合生成硬件電路的部分;第二個就是Testbench文件,用來驗證RTL代碼功能的仿真文件,這兩者缺一不可。

2、根據觀察發現官方模板中的代碼編輯部分有兩個module,大家也都知道一個.v 文件中只能有一個模塊,也就是只能有一個module,而這里面有兩個,那肯定就不對了。再仔細觀察會發現代碼編輯區域中的上半部分就是Testbench,而下半部分則是RTL代碼,再結合仿真出的波形來更看驗證了這個想法。原來 RTL 代碼和Testbench都寫在了一個編輯框里。

3、但是我們在提供的模板中發現一些我們平時幾乎沒有見過的新語法,如第4行的”initial `probe_start“、第6行的”`probe(clk)“、第26行的”`probe(in)“,通過模板的注釋和多次實驗發現這是官方定義的一個”宏“,也就是通過這個”宏“調用“probe”探針的功能,我們不用管這個”宏“是如何定義的,我們只需要會調用就可以了。

??? 4、下面我們通過該網頁來仿真驗證一下自己設計的呼吸燈的例子。詳細代碼如下(呼吸燈邏輯和Testbench代碼的編寫方法這里我們不做講解,會在以后的文章中再進行詳細說明),標紅處的注釋是需要特別強調的(代碼可以全部直接復制使用)。

`timescale1ns/1ns//-------------------Tesebench--------------------moduletop_module;???????//仿真文件名必須是“top_module”reg????sclk;reg????rst_n;wire???led;initial?`probe_start;???//?Start?the?timing?diagram????`probe(sclk);?????????//?Probe?signal"clk",這是加載的系統時鐘,只能在Tesebench中加載???//初始化initial????begin????sclk???=1'b0;????rst_n?<=?1'b0;????#200????rst_n?<=?1'b1;????#5000?????????????????//一定要設置仿真停止時間,如果仿真結束時間太久會提示????$finish;end//產生20ns的時鐘always#10sclk?=~sclk;//為了減少仿真時間我們在仿真中重定義參數,不影響RTL代碼中參數的值defparam???breath_led_inst.CNT_1US_MAX?=?1;defparam???breath_led_inst.CNT_1MS_MAX??=?2;defparam???breath_led_inst.CNT_1S_MAX???=2;//-------------------breath_led--------------------breath_ledbreath_led_inst(????.sclk??(sclk??),??//input????sclk??????.rst_n(rst_n),??//input????rst_n?????.led????(led??)???//output???led);endmodule?//--------------------------------------------------//-----------------------RTL------------------------modulebreath_led#(????parameter??CNT_1US_MAX?=6'd49,????parameter??CNT_1MS_MAX?=10'd999,????parameter??CNT_1S_MAX??=10'd999)(????input??wire???sclk???,????input??wire???rst_n??,????outputreg????led);reg[5:0]??cnt_1us;??reg[9:0]??cnt_1ms;??reg[9:0]  cnt_1s;reg????????cnt_1us_flag;reg????????cnt_1ms_flag;reg        cnt_1s_flag;//cnt_1us:1us計數器always@(posedgesclk?ornegedgerst_n)????if(rst_n?==1'b0)???????cnt_1us?<=6'b0;?????else???if(cnt_1us==?CNT_1US_MAX)?????????cnt_1us?<=6'b0;????else       cnt_1us <=cnt_1us + 1'b1;//cnt_1us_flag:1us計數器標志信號always@(posedgesclk?ornegedgerst_n)????if(rst_n?==1'b0)???????cnt_1us_flag?<=?1'b0;???????else???if(cnt_1us==??CNT_1US_MAX)????????cnt_1us_flag?<=?1'b1;????else???????cnt_1us_flag?<=?1'b0;//cnt_1ms:1ms計數器always@(posedgesclk?ornegedgerst_n)????if(rst_n?==1'b0)???????cnt_1ms?<=10'b0;????else???if(cnt_1ms==??CNT_1MS_MAX?&&?cnt_1us_flag?==1'b1)?????????cnt_1ms?<=10'b0;????else???if(cnt_1us_flag?==1'b1)???????cnt_1ms?<=cnt_1ms?+?1'b1;?????//cnt_1ms_flag:1ms計數器標志信號always@(posedgesclk?ornegedgerst_n)????if(rst_n?==1'b0)???????cnt_1ms_flag??<=??1'b0;?????else???if(cnt_1ms==??CNT_1MS_MAX?&&?cnt_1us_flag?==1'b1)?????????cnt_1ms_flag?<=?1'b1;????else?????????cnt_1ms_flag?<=?1'b0;//cnt_1s:1s計數器always@(posedgesclk?ornegedgerst_n)????if(rst_n?==1'b0)???????cnt_1s<=??10'b0;????else???if(cnt_1s?==CNT_1S_MAX?&&cnt_1ms_flag?==1'b1)???????cnt_1s<=??10'b0;????else???if(cnt_1ms_flag?==1'b1)???????cnt_1s<=??cnt_1s+1'b1;//cnt_1s_flag:1s計數器標志信號always@(posedgesclk?ornegedgerst_n)????if(rst_n?==1'b0)???????cnt_1s_flag?<=?1'b0;????else???if(cnt_1s?==CNT_1S_MAX?&&cnt_1ms_flag?==1'b1)???????cnt_1s_flag?<=?~cnt_1s_flag;???//led:一個LED燈always@(posedgesclk?ornegedgerst_n)????if(rst_n?==1'b0)???????led<=1'b0;??????else???if((cnt_1s_flag?==1'b1?&&cnt_1ms?<=?cnt_1s)||?(cnt_1s_flag??==?1'b0?&&cnt_1ms?>cnt_1s))???????led<=1'b1;????else?????????led<=1'b0;//添加要觀察的信號名????`probe(rst_n??????????);??//Sub-modules?can?also?have?`probe()????`probe(cnt_1us????????);??//Sub-modules?can?also?have?`probe()????`probe(cnt_1us_flag??);??//Sub-modules?can?also?have?`probe()????`probe(cnt_1ms???????);??//Sub-modules?can?also?have?`probe()????`probe(cnt_1ms_flag??);??//Sub-modules?can?also?have?`probe()????`probe(cnt_1s?????????);??//Sub-modules?can?also?have?`probe()????`probe(cnt_1s_flag???);??//Sub-modules?can?also?have?`probe()????`probe(led????????????);??//Sub-modules?can?also?have?`probe()endmodule//--------------------------------------------------

5、將上面編寫好的Testbench代碼和RTL代碼放到一個文件中(Testbench在上面,RTL代碼在下面,僅在該平臺仿真時可以將兩種文件放在一起,在其他平臺仿真時要獨立放到兩個.v文件中),然后復制粘貼到代碼編輯框中,點擊“Submit(new window)“執行仿真。

b668b8b348347bfe2de773b7656b5348.png

6、也可以將寫好的Testbench代碼和RTL代碼放到同一個.v文件中,然后點擊下面的代碼編輯框下面的“Upload a source file...”,在展開的界面中選擇添加.v文件后,再點擊”Upload and simulate”啟動仿真。

ac068f5ebe796c8ffb5f3652adb27ab9.png

97c177f6ac9f31b9fcb2d1df5493a359.png??

7、仿真波形如下所示,因為界面空間有限,拖動波形顯示框下面的滾動條,可以看到后面的波形顯示。?

7136e1fb87460afdb7af0cf0faacc098.png

8、在波形顯示框中右擊鼠標可以選擇保存為PNG格式或SVG格式,將完整的波形信息保存下來。

5859bd33ea8a5139b6b9f7238d6816de.png

9、保存為SVG格式后的完整波形圖如下所示。

0c6429751ac348e8e20fde40aea94c7e.png

10、如果我們在第58行處代碼設置一個錯誤后,再點擊執行仿真,此時在仿真窗口中不會顯示波形,而是提示錯誤的內容,將錯誤修改后再執行仿真即可。

ce0ede2ea039988de95685d238b08fb0.png

f900abf986ae078afcde29a98fa693b5.png

11、該網頁還有其他更多有趣的功能,如組合邏輯代碼編寫訓練、時序邏輯代碼編寫訓練、單片機嵌入式仿真等等,有興趣的朋友可以自己探索,這里不再一一演示。

56625741896aa433ce1f959ad1302188.png

關于答案所有題目沒有標準答案,github上很多答案,大家在遇到問題的時候可以去搜索參考,建議遇到問題多思考,才能學能所用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373506.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遇到的零碎問題

Show()時&#xff0c;其他窗口仍可響應&#xff0c;ShowDialog()時其他窗口無響應。 在public Form1()中使用messagebox會先出現信息窗口&#xff0c;再顯示主窗體&#xff0c;故考慮加入了start按鈕。 play()會被打斷&#xff0c;PlaySync&#xff08;&#xff09;會播放完再執…

Tomcat上具有JAX-WS的Web服務

讓我們假設一家企業正在一個集中式系統中維護用戶身份驗證詳細信息。 我們需要創建一個AuthenticationService&#xff0c;它將獲取憑據&#xff0c;對其進行驗證并返回狀態。 其余的應用程序將使用AuthenticationService對用戶進行身份驗證。 創建AuthenticationService接口&a…

Python的下載及安裝

1、官網下載地址&#xff1a;https://www.python.org/downloads/ 2、python設置環境變量&#xff1a; 在系統變量里添加Python的安裝位置 3、在cmd里輸入python里即可轉載于:https://www.cnblogs.com/fun0623/p/5257573.html

MongoDB 字段拼接 $concat(aggregation)

$concat 拼接字符串操作&#xff0c;返回拼接后的字符串。語法格式如下&#xff1a; { $concat: [ <expression1>, <expression2>, ... ] }參數可以是任何有效的表達式&#xff0c;只要它們解析為字符串即可。 有關表達式的更多信息&#xff0c;請參閱表達式。 示…

cmake mysql 編譯參數_Cmake-MySQL編譯參數說明

Cmake-MySQL編譯參數說明(來源于MySQL官方手冊)https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.htmlFormats Description DefaultIntroduced Removed ##格式描述默認導入刪除BUILD_CONFIG Use same build options as official releases ##b使用相同…

動態給H5頁面綁定數據,基本萬能無錯誤!

此為原創&#xff0c;轉載請注明出處&#xff01; /* * 共通用綁定頁面數據用方法 * * param bingData 需要綁定的數據 * * return 無 * */function commonBindData(bingData) { // 取得需綁定的json數據 var jsonArray eval("(" bingData ")"); // …

c語言函數---M

書畫小說軟件 制作更滿意的讀、更舒心的寫、更輕松的公布最全古典小說網 由本軟件公布所得main()主函數 每一C 程序都必須有一main()函數, 能夠依據自己的愛好把它放在程序的某 個地方。有些程序猿把它放在最前面, 而還有一些程序猿把它放在最后面, 不管放 在哪個地方, 下面幾…

使用Apache ActiveMQ的JMS開發基礎

去年是我嘗試JMS的時候。 背后的想法和概念讓我有些困惑&#xff0c;但是當我知道它的用途后&#xff0c;我很快就掌握了它。 在本文中&#xff0c;我將展示使用Apache ActiveMQ作為后端使用Java開發簡單的生產者/消費者的基礎。 讓我們首先從概念開始&#xff0c;這是一個簡單…

vijos p1460——拉力賽

描述 車展結束后&#xff0c;游樂園決定舉辦一次盛大的山道拉力賽&#xff0c;平平和韻韻自然也要來參加大賽。 賽場上共有n個連通的計時點&#xff0c;n-1條賽道&#xff08;構成了一棵樹&#xff09;。每個計時點的高度都不相同&#xff08;父結點的高度必然大于子結點&#…

mysql acid_Mysql中ACID的原理

原子性 (Atomicity)原子性是指一個事務是一個不可分割的工作單位&#xff0c;其中的操作要么都做&#xff0c;要么都不做。隔離性 (Isolation)隔離性是指多個事務并發執行的時候&#xff0c;事務內部的操作與其他事務是隔離的&#xff0c;并發執行的各個事務之間不能互相干擾…

MongoDB 自動刪除集合中過期的數據——TTL索引

簡介 ? TTL (Time To Live, 有生命周期的) 索引是特殊單字段索引&#xff0c;MongoDB可以用來在一定時間后自動從集合中刪除文檔的特殊索引。 這對于某些類型的數據非常好&#xff0c;例如機器生成的事件數據&#xff0c;日志和會話信息&#xff0c;這些信息只需要在數據庫中…

PLSQL 經常自動斷開失去連接的解決過程

問題背景&#xff1a; 情況是這樣的&#xff0c;很多開發同事的PLSQL上班時間開著8個小時&#xff0c;有時候他們出去抽煙后或者中午吃完飯&#xff0c;回來在PLSQL上面執行就報錯無響應&#xff0c;然后卡住了半天動彈不了&#xff0c;非得重新登錄plsql才生效&#xff0c;我猜…

使用Cobertura,JUnit,HSQLDB,JPA涵蓋您的測試

你好&#xff01;你好嗎&#xff1f; 今天讓我們談談一個非常有用的工具&#xff0c;名為“ Cobertura”。 該框架與我們在另一篇文章中看到的Emma框架具有相同的功能。 Cobertura和Emma之間的主要區別在于Cobertura顯示帶有圖形的簡歷頁面。 如果要查看有關該主題的其他主題…

fedora mysql gui_fedora8安裝 mysql++失敗!!裝了一個晚上沒搞定!!傷心阿!

fedora8安裝 mysql失敗&#xff01;&#xff01;裝了一個晚上沒搞定&#xff01;&#xff01;傷心阿&#xff01;發布時間:2008-02-24 05:15:27來源:紅聯作者:lygzx[rootF8 mysql-3.0.0]# ./configure --w/usr/lib/mysqlconfigure: error: unrecognized option: --w/usr/lib/my…

MongoDB 數組類型查詢 —— $elemMatch 操作符

描述 $elemMatch 數組查詢操作用于查詢數組值中至少有一個能完全匹配所有的查詢條件的文檔。語法格式如下&#xff1a; { <field>: { $elemMatch: { <query1>, <query2>, ... } } }如果只有一個查詢條件就沒必要使用 $elemMatch。 限制 不能指定 $where 查…

MVC4 Action 方法的執行

1. ActionInvoker 的執行&#xff1a; 在MVC 中 包括Model綁定與驗證在內的整個Action的執行是通過一個名為ActionInvoker的組件來完成的。 它同樣具有 同步/異步兩個版本。 分別實現了接口 IActionInvoker /IAsyncActionInvoker。 ASP.NET MVC 中真正用于Action方法同步和異步…

C# 基礎知識總結

要學好C#&#xff0c;基礎知識的重要性不言而喻&#xff0c;現將常用到的一些基礎進行總結&#xff0c;總結如下&#xff1a; 01. 數據類型轉換&#xff1a; 強制類型轉換(Chart--> int): char crA; int i (int)(cr); 02. 委托/匿名函數/Lamda表達式&#xff1a; 委托是匿…

Java注釋和真實世界的Spring示例

“注釋”是編程語言定義的一種&#xff0c;用作“標記”。 可以將它們視為編程語言引擎可以理解的注釋行。 它們不會直接影響程序的執行&#xff0c;但是會在需要時間接影響。 定義 注釋使用interface關鍵字定義&#xff0c;并且與接口相似。 它具有定義類似于接口方法的屬性。…

scrapy+mysql+pipeline+更新數據_python3+Scrapy爬蟲實戰(二)—— 使用pipeline數據保存到文本和數據庫(mysql)...

前言保存本地存儲Json數據配置setting保存數據庫創建數據庫創建表編寫pipelines配置setting本文是對上篇文章所講的代碼進一步優化&#xff0c;回看可以點這里&#xff0c;代碼就直接在上一篇代碼中進行改造&#xff0c;沒有的小伙伴可以在這里下載。前言Scrapy 提供了 pipelin…

NYOJ 44 子串和

子串和 時間限制&#xff1a;5000 ms | 內存限制&#xff1a;65535 KB難度&#xff1a;3描述 給定一整型數列{a1,a2...,an}&#xff0c;找出連續非空子串{ax,ax1,...,ay}&#xff0c;使得該子序列的和最大&#xff0c;其中&#xff0c;1<x<y<n。 輸入 第一行是一個…