Verilog HDL设计练习进阶(三)
2012-06-02
标签:

练习三. 利用条件语句实现较复杂的时序逻辑电路

目的:掌握条件语句在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;

wireF500K_clk;

always #`clk_cycleF10M_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

仿真波形:

练习:利用10M的时钟,设计一个单周期形状如下的周期波形。

可能会用到的工具/仪表
相关文章
推荐文章
热门文章
章节目录
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号