Verilog小练习- 看时序写代码(05--06)

简介: Verilog小练习- 看时序写代码(05--06)

写在前面


承接本系列上文。整理一些简单的根据时序图编写Verilog代码的实例,帮助新手学习,老手巩固。每次更新两题,根据难度会挑选一些进行讲解。

题目05


image.png

题目05答案


这个题的思路挺像02和03(或者04)结合


wire add_cnt;
wire end_cnt;
reg [ :0] cnt ;
assign add_cnt = flag ==1;       
assign end_cnt = add_cnt && cnt== x-1; 
assign high_flag =  add_cnt && cnt== y-1;
always @(posedge clk or negedge rst_n)begin
  if(!rst_n)begin
    cnt <= 0;
  end
  else if(add_cnt)begin
    if(end_cnt)
      cnt <= 0;
    else
      cnt <= cnt + 1;
  end
end
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
    flag <=0;
  end
  else if(en1==1||en2==1)begin
    flag <=1;
  end
  else if(end_cnt==1)begin
    flag <=0
  end
  else begin
    flag <=flag;
  end
end
always  @(posedge clk or negedge rst_n)begin
    if(rst_n == 1'b0)begin
        dout<= 0;
    end
    else if(high_flag==1)begin
        dout<= 1;
    end
    else if(end_cnt==1)begin
        dout<= 0;
    end
end
always  @(*)begin
    if(rst_n==1'b0)begin
    x=0;
  end
  else if(en1==1)begin
    x=4;
  end
  else if(en2==1)begin
    x=2;
  end
  else begin
    x=x;
  end
end
always  @(*)begin
    if(rst_n==1'b0)begin
    y=0;
  end
  else if(en1==1)begin
    y=2;
  end
  else if(en2==1)begin
    y=1;
  end
  else begin
    y=y;
  end
end

题目06


每次触发后都是第一个波形,三个高电平

image.png

题目06答案


佛系更新个可以验证的模块代码,使用的是modelsim。

module


module test06 (
  input clk,    // Clock
  input en1, // Clock Enable
  input rst_n,  // Asynchronous reset active low
  output reg dout
);
wire add_cnt;
wire end_cnt;
reg  flag;
reg [3:0] cnt ;
assign add_cnt = flag ==1;       
assign end_cnt = add_cnt && cnt== 6-1; 
wire high_flag =  add_cnt && (cnt== 2-1||cnt== 4-1||cnt== 6-1);
always @(posedge clk or negedge rst_n)begin
  if(!rst_n)begin
    cnt <= 0;
  end
  else if(add_cnt)begin
    if(end_cnt)
      cnt <= 0;
    else
      cnt <= cnt + 1;
  end
end
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
    flag <=0;
  end
  else if(en1==1)begin
    flag <=1;
  end
  else if(end_cnt==1)begin
    flag <=0;
  end
  else begin
    flag <=flag;
  end
end
always  @(posedge clk or negedge rst_n)begin
    if(rst_n == 1'b0)begin
        dout<= 0;
    end
    else if(high_flag==1)begin
        dout<= 1;
    end
    else if(end_cnt==1)begin
        dout<= 0;
    end
    else begin
        dout<= 0;
    end
end
endmodule

测试激励


`timescale 1ns/1ps
module tb_my_logic;
  reg clk,en1,rst_n;
  wire dout;
  test06 u1(
  clk,    // Clock
  en1, // Clock Enable
  rst_n,  // Asynchronous reset active low
  dout
);
always #10 clk =!clk;
  initial begin
    clk = 1;
    rst_n=0;en1=0;
    #100;
    rst_n=1;
    #20 en1=1;
    #20 en1=0;
  end
endmodule

do文件


vlib work
vmap work
vlog  "test06.v"
vlog  "tb_my_logic.v"
vsim -voptargs=+acc -novopt work.tb_my_logic
add wave /tb_my_logic/*
run -all

仿真截图


验证波形一致。

image.png

目录
相关文章
|
存储 数据采集
时序逻辑电路的应用及其作用
一、什么时序逻辑电路 时序逻辑电路是一种电子电路,用于处理和存储时序信息。它通过使用时钟信号来控制电路的行为,以实现特定的功能。 时序逻辑电路通常由触发器和组合逻辑电路组成。触发器是一种存储器件,可以存储和传递电信号。组合逻辑电路则根据输入信号的组合产生输出信号。 时序逻辑电路的行为是根据时钟信号的变化来确定的。时钟信号是一个周期性的信号,用于同步电路的操作。在每个时钟周期中,电路根据输入信号和当前状态来计算输出信号,并在时钟信号的上升沿或下降沿时更新状态。 时序逻辑电路可以用于实现各种功能,如计数器、状态机、时序控制器等。它在数字系统中起着重要的作用,用于处理时序信息和控制电路的行为。 二、
757 0
|
6月前
|
存储 异构计算
FPGA入门(4):时序逻辑(一)
FPGA入门(4):时序逻辑
64 0
|
8月前
|
算法 异构计算
m基于FPGA的Alamouti编码verilog实现,包含testbench测试文件
m基于FPGA的Alamouti编码verilog实现,包含testbench测试文件
86 5
|
芯片 异构计算
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
280 0
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
|
存储 算法 异构计算
m基于FPGA的数据串并并串转换系统verilog实现,包含testbench,可以配置并行数量
m基于FPGA的数据串并并串转换系统verilog实现,包含testbench,可以配置并行数量
390 0
|
算法 异构计算
基于FPGA的直接序列扩频通信verilog设计,包括汉明编译码,扩频解扩,同步模块以及testbench
基于FPGA的直接序列扩频通信verilog设计,包括汉明编译码,扩频解扩,同步模块以及testbench
322 0
基于FPGA的直接序列扩频通信verilog设计,包括汉明编译码,扩频解扩,同步模块以及testbench
|
编译器 芯片 异构计算
【数字逻辑 | 组合电路基础】Verilog语法
【数字逻辑 | 组合电路基础】Verilog语法
【数字逻辑 | 组合电路基础】Verilog语法
Verilog 时序控制
Verilog 提供了 2 大类时序控制方法:时延控制和事件控制。事件控制主要分为边沿触发事件控制与电平敏感事件控制。
159 0
|
异构计算
FPGA(4)--VHDL--4位D触发器
FPGA(4)--VHDL--4位D触发器
361 0
FPGA(4)--VHDL--4位D触发器
Verilog语法入门(二)多bit逻辑门
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
219 0