2011-05-12 35 views
2

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

我会用一个例子解释,

假设你有一个串行比特流,你想借奇数之和偶数位元,

所以,你可能会写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个时钟周期就有一个输出。

因此,有可能在赛灵思中管理定时信号,以便我们获得有效的输出。

所以我不希望有一个中间结果在输出。

我们该如何做到这一点?我正在考虑在自由运行的时钟(计数器)中使用某种启用输入。

但是我们在设计一个真正复杂的系统时如何管理这个?

我没有太多的硬件设计经验。所以,如果我的问题与SIMPLE危险接近并且是愚蠢的,那么我对我的智力感到抱歉。

感谢阅读

基兰

回答

2

如果你希望你的输出到唯一的变化时,它是“有效”,您使用的是启用寄存器在与连接东西的使能信号,它是高单个时钟周期同时输出引脚因为进入寄存器的值是您想要在输出端显示的值。在您的情况下,您的“有效”信号在交替时钟周期内在“1”和“0”之间切换,因此您可以使用触发器,通过反相器输出反馈。 (在davidd的代码中,你可以在//tflipflop的行中看到这一点)。

如果你有一个更复杂的系统,这是唯一的一次有效的n周期,你可以使用每n周期复位计数器,并使用复位脉冲作为一个“有效”信号。

+0

感谢您的详细解释。感谢您抽出时间向我解释。我会在我的模型中尝试这个。 – Kiran 2011-05-16 12:49:27

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. 
[email protected](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 
+0

嗨, 感谢您的回复。我现在对时序信号和同步有了很好的理解。 谢谢 – Kiran 2011-05-16 12:51:01