近期專案需要做乙個雙脈衝輸出實驗,利用verilog的pll產生40mhz時鐘訊號,利用此訊號產生脈寬為25ns,間隔75ns(兩上公升沿相隔100ns)的雙脈衝,週期為20微秒,如下圖:
模組輸入為系統時鐘clk,復位rst_n,輸出訊號pulse_out,系統時鐘40mhz,則週期t=1/40mhz=25ns.
20微秒計數:(20*10^-6)*40000000-1=799
25ns:1
100ns:4
125ns:5
`timescale 1ns / 1ps
// module name: clk_div
//產生25ns,間隔75ns的雙脈衝,週期為20微秒
module clk_div(
clk,
rst_n,
pulse_out
);// port declarations //****************************************==
input clk;
input rst_n;
output pulse_out;
//暫存器定義
reg pulse_out;
reg [9:0] counter;
//計數器計數
always@(posedge clk_out1 or negedge rst_n) //檢測時鐘的上公升沿或者下降沿
begin
if(~rst_n) //復位訊號低有效
counter <= 0; //計數器清零
else if(counter == 10'd799) //40mhz,20微秒計數
counter <= 0;
else
counter<=counter + 1'b1; //計數器加1
end//脈衝輸出
always@(posedge clk_out1 or negedge rst_n)
begin
if(~rst_n)
pulse_out<=0;
else if(counter == 10'd0)
pulse_out <= 1'b1;
else if(counter == 1)
pulse_out <= 1'b0;
else if(counter == 4) //100ns時置1
pulse_out <= 1'b1;
else if(counter == 5)
pulse_out <= 1'b0;
else
pulse_out <= pulse_out;
end
//--//----------- begin cut here for instantiation template ---// inst_tag
pll_ip instance_name ///(例化pll模組)
(// clock in ports
.clk_in1(clk), // in
// clock out ports
.clk_out1(clk_out1)); // out
// inst_tag_end ------ end instantiation template ---------
endmodule
其中本次學習新增cdc檔案後用chipscope觀察訊號
1.選擇觸發器位寬:這裡選擇為1
2.資料長度,因為這裡計數只到799,1024就足夠。
3.在此處選擇時鐘訊號埠和觸發訊號
隨後就可以在chipscope中觀察雙脈衝產生得是否準確了。
Linux利用list head結構實現雙向鍊錶
通常實現雙向鍊錶的資料結構 struct list node1 struct list node2 對於每一種資料結構都定義了其特定的實現鍊錶的結構和對應的方法 add del 操作鍊錶 但對於具有大量不同資料結構,都要使用鍊錶的系統中,如果為每一種資料結構定義特定的結構,和操作方法,無疑使 變得重...
利用雙棧實現佇列結構
用陣列封裝的佇列結構 public class mystack public void push int val throws exception data top val top public intpop throws exception top return this data top pub...
雙鏈表實現
一 實驗目的 鞏固線性表的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。二 實驗內容 建立乙個由n個學生成績的順序表,n的大小由自己確定,每乙個學生的成績資訊由自己確定,實現資料的對錶進行插入 刪除 查詢等操作。分別輸出結果。三 源 includeconst i...