首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Verilog HDL设计练习进阶(二)

Verilog HDL设计练习进阶(二)

练习二. 简单时序逻辑电路的设计目的:掌握基本时序逻辑电路的实现。
    在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型,我们通常使用always块和 @(posedge clk)或 @(negedge clk)的结构来表述时序逻辑。下面是一个1/2分频器的可综合模型。
// half_clk.v:
module half_clk(reset,clk_in,clk_out);
input clk_in,reset;
output clk_out;
reg clk_out;
always @(posedge clk_in)
  begin
    if(!reset)  clk_out=0;
    else      clk_out=~clk_out;
  end
endmodule
在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的。对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了能正确地观察到仿真结果,在可综合风格的模块中我们通常定义一个复位信号reset,当reset为低电平时,对电路中的寄存器进行复位。
测试模块的源代码:
//-------------------  clk_Top.v -----------------------------
`timescale 1ns/100ps
`define clk_cycle 50
module clk_Top.v
reg clk,reset;
wire clk_out;
always  #`clk_cycle  clk = ~clk;
initial
  begin
     clk = 0;
     reset = 1;
    #100 reset = 0;
    #100 reset = 1;
    #10000 $stop;
  end
half_clk half_clk(.reset(reset),.clk_in(clk),.clk_out(clk_out));
endmodule
仿真波形:[[wysiwyg_imageupload:244:]]
练习:依然作clk_in的二分频clk_out,要求输出与上例的输出正好反相。编写测试模块,给出仿真波形
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表