Xilinx Simulink中的时序信号理解

时间:2011-05-12 12:42:04

标签: synchronization verilog fpga simulink xilinx

我在Simulink(Xilink Library)中理解时序信号的概念时遇到了一些麻烦。

我将用一个例子来解释,

假设你有一个串行比特流,你想取奇数和偶数比的总和,

所以你可能会编写类似这样的Matlab代码:

Data_Bits=[1 2 3 0 4 5 1 2 0 9];

Sum_Bits=[];
for i=1:length(Data_Bits)/2
    Sum_Bits=[Sum_Bits Data_Bits(2*i-1)+Data_Bits(2*i)]
end

假设暂时忽略了所有优化和极端情况,此代码可能无效。

假设我们必须在硬件中实现这一点,Data_Bits将连续发布, 因此,您基本上等待2个时钟周期以获得2个输入位并添加它并生成输出。

因此,对于每2个时钟周期,您有一个输出。

因此可以在Xilinx中管理时序信号,以便我们获得有效的输出。

所以我不想在输出中得到一个中间结果。

我们如何实现这一目标?我正在考虑使用某种带有自由运行时钟(计数器)的启用输入。

但是,在设计一个非常复杂的系统时,我们如何管理呢?

我对硬件设计没有太多经验。因此,如果我的问题与SIMPLE危险接近并且愚蠢,我很抱歉我的情报。

感谢您阅读

基兰

2 个答案:

答案 0 :(得分:2)

如果您希望输出仅在“有效”时更改,则在输出引脚上使用一个使能寄存器,使能信号连接到一个时钟高的值,同时值为进入寄存器是您要在输出中显示的那个。

在您的情况下,您的“有效”信号在交替的时钟周期内在“1”和“0”之间切换,因此您可以使用触发器,其输出通过逆变器反馈。 (在davidd的代码中,您可以在注释//tflipflop)的行中看到这一点。

如果你有一个更复杂的系统只能在n周期内有效一次,你可以使用一个计数器,它会复位每n个周期,并使用复位脉冲作为“有效”信号。 / p>

答案 1 :(得分:0)

Input stream -------------> AddSub -> register -> output stream
Input stream -> register -> AddSub    register
                                      register
                           counter -> register(enable)

将输入流和输入流延迟1个周期。使用1位计数器(或T触发器)在加法器的输出上启用寄存器。

这就是你要找的东西吗?

在运行复杂系统的同时“管理”这个是什么意思?此构造的verilog或vhdl非常简单,可用于代替系统生成器块。

//note: initialization/reset and limit handling is not included and would need to be considered.
always@(posedge clk)
begin
    databits_1dly <= databits;  //create a once cycle delayed version of databits
    sum <= databits_1dly + databits; //adder
    every_other <= !every_other //t flip flop.
    if (every_other)  //invert if you want the other every_other
       sum_every_other <= sum
end