Board logo

标题: Verilog HDL设计练习进阶(三) [打印本页]

作者: pengpengpang    时间: 2015-3-26 08:44     标题: Verilog HDL设计练习进阶(三)

练习三. 利用条件语句实现较复杂的时序逻辑电路目的:掌握条件语句在Verilog HDL中的使用。
与常用的高级程序语言一样,为了描述较为复杂的时序关系,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
仿真波形:[[wysiwyg_imageupload:245:]]
练习:利用10M的时钟,设计一个单周期形状如下的周期波形。[[wysiwyg_imageupload:246:]]




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0