Synchronization Xilinx Simulink中的定时信号理解

Synchronization Xilinx Simulink中的定时信号理解,synchronization,verilog,fpga,simulink,xilinx,Synchronization,Verilog,Fpga,Simulink,Xilinx,我在理解Simulink(Xilink库)中定时信号的概念时遇到一些困难 我会举例说明, 假设您有一个串行位流,并且希望取奇偶位之和 因此,您可能会编写类似以下内容的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 假设有一段时间,我们忽略了所有的优化和角落

我在理解Simulink(Xilink库)中定时信号的概念时遇到一些困难

我会举例说明,

假设您有一个串行位流,并且希望取奇偶位之和

因此,您可能会编写类似以下内容的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
假设有一段时间,我们忽略了所有的优化和角落案例,这些代码可能无法工作

假设我们必须在硬件中实现这一点,
数据位
是串行的, 因此,您基本上要等待2个时钟周期来获得2个输入位,然后将其相加并生成输出

因此,每2个时钟周期,就有一个输出

因此,是否有可能管理Xilinx中的定时信号,以便获得有效的输出

所以我不想在输出端得到中间结果

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

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

我在硬件设计方面没有那么多经验。所以,如果我的问题近乎简单和愚蠢,我为我的智慧感到抱歉

谢谢你的阅读

基兰

添加输入流和延迟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
//注意:不包括初始化/重置和限制处理,需要考虑。
始终@(posedge clk)
开始

databits_1dly如果您希望输出仅在“有效”时更改,则在输出引脚处使用启用寄存器,启用信号连接到某个高电平单时钟信号,同时进入寄存器的值是您希望在输出时显示的值

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


如果您有一个更复杂的系统,它在
n
周期中仅有效一次,则可以使用计数器重置每个
n
周期,并将重置脉冲用作“有效”信号。

感谢您的详细解释。谢谢你花时间给我解释。我会在我的模型中尝试这个。嗨,谢谢你的回复。我现在对定时信号和同步有了相当好的理解。谢谢
//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