w*****s 发帖数: 433 | 1 问几个基础问题
1)要做一个实时的数据通路,input有24位,output只有16位。不考虑用先编码后解码
的方法。其中要过一个ram,想到过用32 input/16output的ram,并设置不同的in/out
clk频率。那么是不是说input的clock就应该是output的clock的一半,才能保证数据的
实时传输?用ise自动生成这样的ram后,读写controller应该就分开写吧?
2)采样一个信号,比如用简单的一个2级串联的FF来采样(没有试过,不知可行否),
要求采样频率可调。我用不同divider生成了不同频率的clk,再用mux来选择这些clk,
会出问题否?因为听人说过不宜用mux来选择时钟信号。另外,如果我只是用behavior
来写一个可调的divider,实际生成的电路是不是也是用mux来选不同divider生成的不
同的clk?
3)现在要求采样长度可调。如果用上述FF的方法来做,怎样做到长度可调?比如设置
采样100个clk,采样50个clk,采样200个clk。。。。
问题都很基础,期待解答~谢谢! |
p*f 发帖数: 982 | 2 1)应该是一个FIFO,32入,16出,如果你的数据一直有效的话,出口的时钟应该加倍。
2)采样电路应该用一个时钟(最快的那个),然后用不同频率的Clock Enable信号。
只有Clock Enable有效的时候才采样。
3)设一个采样计数器和一个采样长度寄存器,计数器对采样时钟计数,并于采样长度
计数器比较。相等时停止采样。 |
w*****s 发帖数: 433 | 3 @psf:
多谢多谢!~
for 2)也就是说mux来switch不同频率的时钟信号是不宜的对吧?你说的方法就是设计
一组采样电路,接不同频率的clk,然后用clock enable信号来enable不同的采样电路?
for 3) 是类似于这样的code吗?:
if clk' event and clk=1 then
if (count<= length) then
count=count+1;
else
output<=0;
count<=0;
追加一个问题:
不知是否有人熟悉USB chip,比如cypress的。我把cypress的USB chip设置成slave
FIFO的工作模式,由外部输入48MHz的clk时钟(固定值,@ high speed model),这么
说也就是USB FIFO的读写频率是48MHZ了吧?那为什么说high speed USB传输率有450M
bit/s呢?而不是48M bit/s呢? 还是说480M bit/s是峰值,也就是说USB chip FIFO一
次打包传出去的data speed? 如果是这样的话,外部给入USB chip 的data的频率也可
以高于或低于48MHz吗? |
p*f 发帖数: 982 | 4 2)不是。只有一个采样电路,用同一个时钟。但是什么时候采样,取决于采样信号,
这个信号从多个不同频率中选一个。
sample_en = (select==1)clock1 :
(select==2) colck2 :
...
if clk'event and clk==1 then
if sample_en ==1 then
sample <= input;
else
sample <= sample |
w*****s 发帖数: 433 | 5 @psf
thanks!这样采样电路是按照level来变频,而不是edge来变的吧?那这样前面clock1
,clock2给sample_en的code,还是一个MUX来选不同的clock了。 |
p*f 发帖数: 982 | 6 clock1,clock2是逻辑信号,不是真正作为时钟用的.不叫clock1,clock2,也行,例如:
sample_en = (select==1) en1 :
(select==2) en2 :
为什么一定要edge变频?如果没有特别的要求,时钟最好是一个恒定频率的信号。 |
w*****s 发帖数: 433 | |