verilog設計進階
時間:2014年5月6日星期二
主要收獲:
1.自己動手寫了第一個verilog程式。
題目:
利用10m的時鐘,設計一個單周期形狀如下的周期波形。
思考:
最開始的想法是:定義兩個計數器進行計數,兩個使能标志位分别控制這兩個變量。但是這樣邏輯又太複雜,網上搜了搜,還是定義一個計數器比較好。
verilog程式:
modulefdivision(clk, rst, clk_out);
input clk;
input rst;
output clk_out;
reg[5:0] count;
reg rclk_out;
assign clk_out = rclk_out;
always@(posedge clk or negedge rst) begin
if(!rst) begin
count<=0;rclk_out<=0;
end
else if(count==30)
count<=0;
else count<=count+1;
end
always@(posedge clk) begin
if(count<=9) rclk_out<=1;
else rclk_out<=0;
endmodule
測試檔案:
`timescale1ns/1ns
modulefdivision_test;
reg clk, rst;
wire clk_out;
always #2 clk=~clk;
initial begin
clk=0;rst=1;
#20 rst=0;
#20 rst=1;
#500 $stop;
fdivision u1(clk, rst, clk_out);
仿真波形圖: