Re: [問題]請教各位前輩Verilog在I/O方面的技巧
※ 引述《MasterChang (我愛ASM)》之銘言:
: ※ 引述《Faberge (就好像 可以擰出淚水一樣)》之銘言:
: : 小弟在Verilog方面是菜鳥 目前寫好一個Block而且測試起來都都OK了
: : 想在輸入輸出端做些變化檢查一下是否有意料不到的狀況
: : 所以想丟一個Sine wave進入Block中 再檢查輸出是否有失真
: : 但是小弟不了解的是Sine wave絕對是一個類比訊號
: F(x) = sin(2*pi*f*t)
: f是你想產生的頻率,t是時間,通常f*t就是你的sin table的
: index,不過F(x)會在-1到1間變化,對數位訊號不太匹配。
: 假設你的數位輸出/入是8 bits,那就把信號調整在0~255間變
: 化那中心就是127.5
: F(x) = 127.5*sin(2*pi*f*t)+127.5 ,用這去建sin table,
: 得到的值四捨五入變成整數。
: : 我們該如何有效將它變成一個數位訊號當作輸入
: : 比方決定Sine wave振幅 頻率 以及輸入端取樣頻率
: 比如說你的table長度是1000點,每次輸出的時間間隔是1us,
: 那一個波的週期就是1ms,頻率就是1K ,這個應該用心算就算
: 了出來了...XD
: : 這中間該用什麼程式或指令進行轉換的工作
: 我是用Excel這類幫你算,聽說有些IDE很厲害有這類建表的工具...
: : 同時想請教客位前輩是否有軟體可以提供我的輸入對時間與輸出對時間的圖形?
: : 這樣能夠更清楚的看出輸出波形有無失真以及輸入波形是否正確
: : 還麻煩各位前輩不吝指教! 感恩啊!!
: 1.這要看你用的模擬軟體。
: 2.如果你是用FPGA,最好直接在硬體上驗證。
自己來回答自己一下 經過MasterChang的指點以後我用EXCEL做了一個Sine Wave的ROM
然後再加上一個CLK去控制他的輸入時間
把Sine的值向上拉成0~2之間的旋波 在乘上2^9倍 順便把這個值round
變成一個10bit的integer訊號 之後只要調整自己的輸入時間
就可以讓input的時間跟他的時間頻率不同 造成不同的sampling value
但是缺點是他不能算我在bit與bit之間的值 所以要用倍數頻率來sampling
模型如下
module rom (data_out, clock);
input clock;
output [15:0] data_out;
reg [15:0] data_out;
integer [9:0] i;
initial
begin i=0; end
always @ (posedge clock)
begin
case (i)
9'd0 : begin data_out = 512; i=i+1; end
9'd1 : begin data_out = 521; i=i+1; end
9'd2 : begin data_out = 530; i=i+1; end
9'd3 : begin data_out = 539; i=i+1; end
9'd4 : begin data_out = 548; i=i+1; end
:
:
:
9'd356 : begin data_out = 476; i=i+1; end
9'd357 : begin data_out = 485; i=i+1; end
9'd358 : begin data_out = 494; i=i+1; end
9'd359 : begin data_out = 503; i=0; end
endcase
end
endmodule
實在是一個很土法煉鋼的方法,但是可以保證在輸出的時候會得到順利的Sine Wave波形
我有在網路上看到用演算法去求出兩個整數角度之間的值,如果成功的話再丟上來做參考
現在想另外請問的是 小弟用的是VCS6.0.1的軟體 還有VerSim可以看每個時間的狀態
但是很想把輸出的值對到excel上
不知道有沒有這樣的指令可以讓小弟做到輸出成excel的指令?
又要麻煩各位前輩了! 肛溫啊!! orz!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.135.97
推
08/18 01:53, , 1F
08/18 01:53, 1F
推
08/20 15:53, , 2F
08/20 15:53, 2F
推
08/21 01:24, , 3F
08/21 01:24, 3F
討論串 (同標題文章)