在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 5190|回复: 17

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

[复制链接]
发表于 2009-10-31 16:36:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
我想实现如下的逻辑功能:
如果a产生了一个时钟周期的脉冲,那么b则输出一个长达2或3个时钟周期的脉冲(即产生一个脉冲展宽的信号)
要求不能用计数器实现(我感觉用计数器来描述代码还是有点多,我想应该有更简洁的描述)
发表于 2009-10-31 18:59:39 | 显示全部楼层
这个相当于分频啊
不用计数器
always @(posedge clk)
  clkout<=clkout +1;

二分频,不用计数器
其实现实中你这样没必要
现在芯片资源越来越多,价格越来越低
只要设计出的东西ok就行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-31 19:38:19 | 显示全部楼层
本帖最后由 becoll 于 2009-10-31 20:02 编辑

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

使用道具 举报

发表于 2009-11-1 19:48:22 | 显示全部楼层
有一点没有明确  a与clk的相位关系
RS  触发器可解决
a作为set
被时钟延迟后的a作为clr
回复 支持 反对

使用道具 举报

发表于 2009-11-2 08:57:34 | 显示全部楼层
不知道这样是否满足你的要求
单脉冲信号宽度为一个时钟周期,这样在时钟下一定能被打到
将这个单脉冲信号寄存一拍,若原信号为pulse,寄存后的信号为pulse_d,将这两个信号或上pulse^pulse_d,即扩展为两个时钟周期宽度
回复 支持 反对

使用道具 举报

发表于 2009-11-2 09:47:43 | 显示全部楼层
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 ;
回复 支持 反对

使用道具 举报

发表于 2009-11-2 16:23:27 | 显示全部楼层
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
回复 支持 反对

使用道具 举报

发表于 2009-11-2 16:27:14 | 显示全部楼层
很多方法啊 A延迟一拍再做逻辑
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-3 09:17:03 | 显示全部楼层
5# sirius.yuan
谢谢。是个好方法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-3 09:28:58 | 显示全部楼层
6# wasabi55
谢谢。很简洁的代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-9-12 12:28 , Processed in 0.021074 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表