Re: [問題]請教各位前輩Verilog在I/O方面的技巧

看板Electronics作者 (地下情人)時間18年前 (2007/08/18 02:14), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
※ 引述《Faberge (就好像 可以擰出淚水一樣)》之銘言: : ※ 引述《MasterChang (我愛ASM)》之銘言: : : 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, : : 得到的值四捨五入變成整數。 : : 比如說你的table長度是1000點,每次輸出的時間間隔是1us, : : 那一個波的週期就是1ms,頻率就是1K ,這個應該用心算就算 : : 了出來了...XD x(t) = sin(2*pi*f*t) t = n*Ts = n/fs => x[n] = sin(2*pi*f*n*Ts) = sin(2*pi*f/fs*n), n=0,1,2,... 基本上 f 是想輸出的頻率, fs 則是取樣率, 當然還得符合取樣定理 所以在你下面的程式裡面 i 就是式子裡的 f/fs 也可以說是你 table 的 phase : : 我是用Excel這類幫你算,聽說有些IDE很厲害有這類建表的工具... : : 1.這要看你用的模擬軟體。 : : 2.如果你是用FPGA,最好直接在硬體上驗證。 以前小弟我都是用 MATLAB 來建 table, 例如 x = 2^9 * round( sin(2*pi*f/fs.*[0:N-1]) ); : 自己來回答自己一下 經過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波形 不是很懂你的 "只要調整自己的輸入時間 就可以讓input的時間跟他的時間頻率不同 造成不同的sampling value" 提供一點小小淺見, 有錯請鞭小力點 ^^" 把程式內部的 i 改為當作你的 input phase 這樣在程式外部只需控制好 phase 就可以改變你的輸出頻率 : 我有在網路上看到用演算法去求出兩個整數角度之間的值,如果成功的話再丟上來做參考 : 現在想另外請問的是 小弟用的是VCS6.0.1的軟體 還有VerSim可以看每個時間的狀態 : 但是很想把輸出的值對到excel上 : 不知道有沒有這樣的指令可以讓小弟做到輸出成excel的指令? : 又要麻煩各位前輩了! 肛溫啊!! orz! 輸入角度求出三角函數的方法, 可以找找 CORDIC 演算法 (他不只可以求三角函數 @@) 另外, verilog 有提供 text I/O 的 function... 提供參考 至於輸出成 excel 小弟就不是很瞭了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.162.77.59
文章代碼(AID): #16nUMRMb (Electronics)
討論串 (同標題文章)
文章代碼(AID): #16nUMRMb (Electronics)