集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2156|回复: 4

【FPGA设计实例】利用条件语句实现较复杂的时序逻辑电路

[复制链接]
lovelyboywyl 发表于 2010-11-20 10:21:17 | 显示全部楼层 |阅读模式
与常用的高级程序语言一样,为了描述较为复杂的时序关系,Verilog HDL提供了条件语句供分支判断时使用。在可综合风格的Verilog HDL模型中常用的条件语句有if…else和case…endcase两种结构,用法和C程序语言中类似。两者相较,if…else用于不很复杂的分支关系,实际编写可综合风格的模块、特别是用状态机构成的模块时,更常用的是case…endcase风格的代码。这一节我们给的是有关if…else的范例,有关case…endcase结构的代码已后会经常用到。
下面给出的范例也是一个可综合风格的分频器,是将10M的时钟分频为500K的时钟。基本原理与1/2分频器是一样的,但是需要定义一个计数器,以便准确获得1/20分频

模块源代码:
// --------------- fdivision.v -----------------------------
module fdivision(RESET,F10M,F500K);
input F10M,RESET;
output F500K;
reg F500K;
reg [7:0]j;
  always @(posedge F10M)
    if(!RESET)          //低电平复位。
      begin
        F500K <= 0;
        j <= 0;
      end
    else
      begin
        if(j==19)      //对计数器进行判断,以确定F500K信号是否反转。
          begin
            j <= 0;
            F500K <= ~F500K;
          end
        else
          j <= j+1;
      end
endmodule

测试模块源代码:
//---------------  fdivision_Top.v ------------------------

`timescale 1ns/100ps
`define clk_cycle 50

module division_Top;

reg F10M_clk,RESET;

wire  F500K_clk;

always #`clk_cycle   F10M_clk  =  ~ F10M_clk;

initial
  begin
RESET=1;
F10M=0;
#100 RESET=0;
#100 RESET=1;
#10000 $stop;
  end

fdivision fdivision (.RESET(RESET),.F10M(F10M_clk),.F500K(F500K_clk));

endmodule
 楼主| lovelyboywyl 发表于 2010-11-20 10:30:30 | 显示全部楼层
这个都很基础,有C基础的话,学习verilog还是很容易的
 楼主| lovelyboywyl 发表于 2010-11-20 10:30:33 | 显示全部楼层
这个都很基础,有C基础的话,学习verilog还是很容易的
大鹏 发表于 2022-3-7 18:31:19 | 显示全部楼层
【FPGA设计实例】利用条件语句实现较复杂的时序逻辑电路
大鹏 发表于 2022-3-21 12:01:55 | 显示全部楼层
【FPGA设计实例】利用条件语句实现较复杂的时序逻辑电路
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-1 11:47 , Processed in 0.059616 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表