1、代碼輸入
(1)、新建一個ISE工程,名字為count4。
(2)、新建一個verilog文件
(3)、選擇verilog module 輸入file name為count4,單擊next默認知道finish。
(4)、在count4.v文件中輸入以下代碼
module count4(out,reset,clk
);
output [3:0] out;
input reset,clk;
reg [3:0] out;
always@(posedge clk) begin
if(reset)
out<=0;
else
out<=out+1;
end
endmodule
(5)、新建一個testbench文件(綜合時,不參與綜合),和第(2)步驟相同
(6)、選擇 verilog Test Fixture。
(7)、創建完成后,輸入以下代碼
module count4_tb;
reg clk,reset;
wire [3:0] out;
parameter DELY=100;
count4 mycount(.out(out),.reset(reset),.clk(clk));
//count4 mycount(out,reset,clk); 若簡寫,功能仿真正確,時序仿真會因為端口不匹配,//會出錯
always #(DELY/2) clk=~clk;
initial begin
clk=0;
reset=0;
#DELY reset=1;
#DELY reset=0;
#(DELY*200) $finish;
end
initial $monitor($time,,,"clk=%d reset=%d out=%d",clk,reset,out);
endmodule
注:可以修改文件的屬性,是否為testbench或者為verilog文件。右擊要修改的文件。選擇source properties
修改屬性,simulation為testbench .implementation為正常的verilog文件
2、功能仿真
功能仿真放在綜合前面,是因為大型程序綜合需要很長的時間,而功能仿真不需要綜合,可以先功能仿真,確保代碼的正確性。功能仿真正確后,再綜合,然后進行綜合后仿真。
(1)、切換到simulation。選擇behavioral。
(2)、單擊選中count4_tb文件,然后雙擊simulate behavioral model。
(3)、在modelsim,查看波形等內容。
3、時序(綜合后)仿真
時序仿真將時延考慮進去,包括綜合后產生的(與、或、非)門時延,還有布局布線產生的時延。
綜合(Synthesize),就是將HDL語言設計輸入翻譯成由與、或、非門和RAM、觸發器等邏輯單元組成的網表。綜合后可生成綜合后仿真模型(Generate Post-Synthesis Simulation Model)。
綜合后,進行ISE的實現(Implement),包括翻譯、映射、布局布線。在這三個過程中都可以生成一個仿真模型(翻譯和映射不會產生延時,因此常用布局布線后產生的仿真模型進行時序仿真)
(1)、進行綜合,雙擊 Synthesize – XST ,想生成 Post-Synthesis Simulation Model,雙擊Generate Post-Synthesis Simulation Model即可,會在工程文件夾下生成netgen\synthesis\count4_synthesis.v等文件
(2)、進行實現,雙擊 Implement Design ,完成后,雙擊Generate Post-Place & Route Simulation Model.。生成布局布線后仿真模型。
(3)、切換到 Simulation ,選中Post-route。
(4)、然后選中count4_tb文件,雙擊下面的Simulate Post-Place&Route Model,啟動modelsim。
(5)、在modelsim中觀察仿真波形。可以看到輸出out有明顯的延時。
本文出自 “李海川” 博客,請務必保留此出處http://lihaichuan.blog.51cto.com/498079/984870
補充:http://wenku.baidu.com/link?url=idbSvNzz2fLSl1WXiEmtIL1amhQTHmtqqQ6g1cp-oU1X3W4wF2Wdu5LSe745rwjCrM-btR44-we9zLCyMf2ofjjAt2d8wcBT7LFyIHF8Tym