微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 如何用VHDL或Verilog最简洁地描述出一种逻辑功能(详见正文)

如何用VHDL或Verilog最简洁地描述出一种逻辑功能(详见正文)

时间:10-02 整理:3721RD 点击:
我想实现如下的逻辑功能:
如果a产生了一个时钟周期的脉冲,那么b则输出一个长达2或3个时钟周期的脉冲(即产生一个脉冲展宽的信号)
要求不能用计数器实现(我感觉用计数器来描述代码还是有点多,我想应该有更简洁的描述)

这个相当于分频啊
不用计数器
always @(posedge clk)
  clkout<=clkout +1;
二分频,不用计数器
其实现实中你这样没必要
现在芯片资源越来越多,价格越来越低
只要设计出的东西ok就行了

2# wyqkiss
谢谢!其实不是分频。a不是一个时钟信号,而是一个单脉冲信号,正脉宽为一个时钟周期。这个信号产生后,我希望输出一个新的单脉冲信号b,b的正脉宽为2到3个时钟周期。逻辑图如下(时钟信号未画出):

有一点没有明确  a与clk的相位关系
RS  触发器可解决
a作为set
被时钟延迟后的a作为clr

不知道这样是否满足你的要求
单脉冲信号宽度为一个时钟周期,这样在时钟下一定能被打到
将这个单脉冲信号寄存一拍,若原信号为pulse,寄存后的信号为pulse_d,将这两个信号或上pulse^pulse_d,即扩展为两个时钟周期宽度

process(clk) begin
if clk'event andclk = '1' then
   a1 <= a;
   a2 <= a1;
   a3 <= a2;
end if;
end process;
b= a or a1 or a2 or a3 ;

module pulse_modulate();
    reg   clk;
    reg   pulse;
    reg   rst_n;
    wire  pulse_out;
   
    initial   begin
        clk   <= 0;
        pulse   <= 0;
        forever #5   clk <= ~clk;
    end
   
    initial   begin
        rst_n   <= 0;
        #100   rst_n   <= 1;
    end
   
    always   begin   
       repeat(5)
       @(posedge clk);
       pulse   <= 1;
       @(posedge clk);
       pulse   <= 0;
    end
   pulse p1(
      .clk(clk),
      .rst_n(rst_n),
      .pulse_in(pulse),
      .pulse_out(pulse_out)
      );   
   
endmodule
module pulse(
   input   clk,
   input   rst_n,
   input   pulse_in,
   output  pulse_out
   );
   
   reg   [ 2: 0] shift;
   
   always@(posedge clk or negedge rst_n)   begin
       if (~rst_n)   shift   <= 0;
       else if (pulse_in)   shift   <= 3'b111;
       else   shift <= {1'b0,shift[2:1]};
   end
   
   assign   pulse_out   = shift[0];
endmodule

很多方法啊 A延迟一拍再做逻辑

5# sirius.yuan
谢谢。是个好方法。

6# wasabi55
谢谢。很简洁的代码

7# lokta
这个思路好啊,我怎么没想到。连测试程序都写出来了,谢谢啦

学习了!

assign b=(| c);
always @ (posedge clk)
    begin
          c[0]<=a;
          c[2:1]<=c[1:0];
    end

学习了~

学习

always@(posedge clock)
begin
  a_dly[1:0] <= {a_dly[1],a};
end
assign b= a | (|a_dly[1:0]);

6楼正解。

嗯 代码不错

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top