日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Modelsim零基础入门】新建项目+运行第一个verilog仿真程序:一位加法器

發(fā)布時間:2024/2/28 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Modelsim零基础入门】新建项目+运行第一个verilog仿真程序:一位加法器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本篇注釋比較詳細,由《Moselsim 第一個仿真程序 四位加法器》修改而來
原博客:https://blog.csdn.net/sinat_42483341/article/details/88970852

新建項目步驟:

1、File->New->Project


分別創(chuàng)建兩個verilog文件


填寫代碼(可以復制這篇下面的源程序),保存后編譯全部

下面這個控制臺輸出說明沒有bug,如果有bug,雙擊錯誤信息,會定位到錯誤所在行

simulate->start simulation,在work下選擇剛寫的兩個文件

右鍵單擊這兩個,分別“add wave”

點這個run

箭頭中標注了一些常用的功能,至此,仿真教程結束。

關于begin end 串行并行的易錯點

代碼一

源程序

//source program module myadd(sum,cout,a,b,cin); //output,output,input,inputinput a,b; //I change a from 4-bit to 1-bitinput cin;output cout;output sum; //I change sum from 4-bit to 1-bit assign {count,sum} = a+b+cin; //to always give value endmodule

仿真程序

//Simulation program `timescale 1ns/1ns `include "MyFirstVerilog.v" module myadd_tb; //測試模塊的名字reg a,b; //測試輸入信號定義為 reg 型reg cin; //測試輸入信號進位設置為 reg 型wire sum; //測試輸出信號定義為 wire 型wire cout; //測試輸出信號進位定義為 wire 型integer i,j;myadd adder(sum,cout,a,b,cin); //調用測試對象(實例化)always #5 cin=~cin;//每5ns對cin進行一次取反//賦值initialbegin a=0;b=0;cin=0; #10 a<=1;b<=1;//這里使用非阻塞賦值,如果使用阻塞賦值a=1;b=1無法成功賦值end //定義結果顯示格式initialbegin $monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum);//控制臺輸出#20$finish; end endmodule

查看波形

控制臺輸出

代碼二

源程序不變,仿真程序如下:

注意25~35行與原來代碼1的不同:代碼1是將a,b 的賦值放在一個initial - begin end中,而本代碼將a,b的賦值過程放在了兩個initial - begin end中。由于initial語句上電后便執(zhí)行一次,所以兩個initial仍然是并行的,本程序與原來程序運行效果相同。

//Simulation program `timescale 1ns/1ns `include "MyFirstVerilog.v" module myadd_tb; //測試模塊的名字reg a,b; //測試輸入信號定義為 reg 型reg cin; //測試輸入信號進位設置為 reg 型wire sum; //測試輸出信號定義為 wire 型wire cout; //測試輸出信號進位定義為 wire 型integer i,j;myadd adder(sum,cout,a,b,cin); //調用測試對象(實例化)always #5 cin=~cin;//每5ns對cin進行一次取反//賦值ainitialbegin a=0;b=0;cin=0; #10 a<=1; //從第10ns開始執(zhí)行,非阻塞賦值end //賦值binitialbegin #10 b<=1; //從第10ns開始執(zhí)行,非阻塞賦值end//定義結果顯示格式initialbegin $monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum);//控制臺輸出#20$finish; end endmodule

從下圖看出,和代碼一的運行效果是完全一樣的

總結

以上是生活随笔為你收集整理的【Modelsim零基础入门】新建项目+运行第一个verilog仿真程序:一位加法器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。