Verilog小练习- 看时序写代码(07--08)

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

写在前面


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

题目07


image.png

题目07答案


类似06的思路

module test07 (
  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== 9-1; 
wire high_flag =  add_cnt && (cnt== 3-1||cnt== 6-1||cnt== 9-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

测试激励和do文件同06,只需要改变实例化名字

image.png

题目08


image.png

题目08答案


这里只不过是把高低电位的flag给改变了,原理置位为高时候这时候置位为0,简单更改逻辑即可。测试同题。

module test08 (
  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== 14-1; 
wire low_flag =  add_cnt && (cnt== 1-1||cnt== 3-1||cnt== 6-1||cnt== 10-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(low_flag==1)begin
        dout<= 0;
    end
    else if(add_cnt==1)begin
      dout<= 1;
    end
    else begin
        dout<= 0;
    end
end
endmodule

image.png

另外一种解法

image.png

image.png

目录
相关文章
|
6月前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
176 7
|
算法 测试技术 开发工具
m基于FPGA的2ASK调制解调系统verilog实现,包含testbench测试文件
m基于FPGA的2ASK调制解调系统verilog实现,包含testbench测试文件
136 0
|
4月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
升级版FPGA MSK调制解调系统集成AWGN信道模型,支持在Vivado 2019.2中设置不同SNR仿真误码率。示例SNR值从0到15,结果展示解调质量随SNR提升。MATLAB仿真验证了MSK性能,图片显示了仿真结果。 ### 理论概要 研究聚焦于软件无线电中的MSK调制解调,利用Verilog实现。MSK是一种相位连续、恒包络的二进制调制技术,优点包括频谱效率高。系统采用无核设计,关键模块包括调制器、解调器和误码检测。复位、输入数据、中频信号等关键信号通过Verilog描述,并通过Chipscope在线观察。
101 6
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
|
6月前
|
算法 异构计算
m基于FPGA的Alamouti编码verilog实现,包含testbench测试文件
m基于FPGA的Alamouti编码verilog实现,包含testbench测试文件
77 5
|
算法 异构计算
m基于FPGA的costas环载波同步verilog实现,包含testbench,可以修改频偏大小
m基于FPGA的costas环载波同步verilog实现,包含testbench,可以修改频偏大小
234 0
|
芯片 异构计算
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
267 0
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
|
存储 算法 测试技术
m基于FPGA的8ASK调制解调系统verilog实现,包含testbench测试文件
m基于FPGA的8ASK调制解调系统verilog实现,包含testbench测试文件
114 0
|
算法 异构计算
m基于FPGA的4ASK调制解调系统verilog实现,包含testbench测试文件
m基于FPGA的4ASK调制解调系统verilog实现,包含testbench测试文件
120 0
|
存储 算法 异构计算
m基于FPGA的数据串并并串转换系统verilog实现,包含testbench,可以配置并行数量
m基于FPGA的数据串并并串转换系统verilog实现,包含testbench,可以配置并行数量
372 0
|
算法 异构计算
m基于FPGA的CRC循环冗余校验系统verilog实现,包含testbench
m基于FPGA的CRC循环冗余校验系统verilog实现,包含testbench
267 0