4.3 Verilog练习(1)

这篇博客介绍了四个Verilog HDL的练习,涵盖组合逻辑设计,如数据比较器,以及时序逻辑设计,包括1/2分频器。练习详细阐述了如何使用assign结构、always块、条件语句(if...else和case...endcase)以及阻塞和非阻塞赋值。在设计时序逻辑时,重点强调了阻塞赋值与非阻塞赋值的区别及其在实际电路中的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以后所有和FPGA相关的开发环境都为Vivado

目录

练习一.简单的组合逻辑设计

练习二. 简单时序逻辑电路的设计

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

练习四. 设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别

 


练习一.简单的组合逻辑设计

这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。

// compare.v

`timescale 1ns / 1ns
/*
1. `timescale 1ns / 1ps,含义为:时延单位为1ns,时延精度为1ps。
​2. 在编译过程中,`timescale会影响其后面所有模块中的时延值,直至遇到另一个`timescale指令或`resetall指令。
3. 当一个设计中的多个模块带有自身的`timescale编译指令时,模拟器将定位在所有模块的最小时延精度上,并且所有时延都相应地换算为最小时延精度。
*/
module compare(a,b,equal);
    input a,b;
    output equal;
    
    assign equal=(a==b)?1:0;
    
endmodule
// simu_compare.v

`timescale 1ns / 1ns
module simu_compare;
    reg a,b;
    wire equal;
    initial
    begin
        a=0;
        b=0;
      #100 a=0;b=1;
      #100 a=1;b=1;
      #100 a=1;b=0;
      #100 $stop;
     end     
     compare u1(.equal(equal),.a(a),.b(b));
endmodule

 

练习二. 简单时序逻辑电路的设计

在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型,我们通常使用always块和 @(posedge clk)或 @(negedge clk)的结构来表述时序逻辑。下面是一个1/2分频器的可综合模型。

//half_clk.v

`timescale 1ns / 1ps
module half_clk(reset,clk_in,clk_out);
    input reset;
    input clk_in;
    output clk_out;
    reg clk_out;
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值