作者renj (地下情人)
看板Electronics
标题Re: [问题]请教各位前辈Verilog在I/O方面的技巧
时间Sat Aug 18 02:14:50 2007
※ 引述《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