Verilog小练习- 看时序写代码(11--12)

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

写在前面


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

题目11


image.png

题目11答案


类似前面10的设计,可以参考提供的三个版本

这里只贴出状态机版本:

module test11_2 (
  input clk,    // Clock
  input en1, // Clock Enable
  input rst_n,  // Asynchronous reset active low
  output reg dout
);
reg [4-1: 0] x;
wire add_cnt;
wire end_cnt;
reg [3:0] cnt ;
reg  flag;
assign add_cnt = flag==1;       
assign end_cnt = add_cnt && cnt==2*x-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
//-----------------状态机-------------------
//--------------<状态机参数>----------------
parameter       S0 =4'b0000,
        S1 =4'b0001,
        S2 =4'b0010,
        S3 =4'b0100;
//---------------<信号定义>------------------
reg [4- 1 : 0] state_c, state_n;
//设计转移条件
wire S0toS1_condition  = state_c==  S0  && end_cnt==1;
wire S1toS2_condition  = state_c==  S1  && end_cnt==1;
wire S2toS3_condition  = state_c==  S2  && end_cnt==1;
//描述次态寄存器迁移到现态寄存器
always@(posedge clk or negedge rst_n)begin
  if(!rst_n)begin
    state_c <= S0;
  end
  else begin
    state_c <= state_n;
  end
end
//描述状态转移条件判断
always@(*)begin
  case(state_c)
    S0:begin
      if(S0toS1_condition)begin
        state_n = S1;
      end
      else begin
        state_n = state_c;
      end
    end
    S1:begin
      if(S1toS2_condition)begin
        state_n = S2;
      end
      else begin
        state_n = state_c;
      end
    end
    S2:begin
      if(S2toS3_condition)begin
        state_n = S3;
      end
      else begin
        state_n = state_c;
      end
    end
    S3:begin
      state_n = S0;
    end
    default:begin
      state_n = S0;
    end
  endcase
end
//输出
always @(*)begin
  if(rst_n==0)begin
    x<=0;
  end
  else if(state_c==S0)begin
    x<=3;
  end
  else if(state_c==S1)begin
    x<=2;
  end
  else if(state_c==S2)begin
    x<=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(state_c==S3)begin
    flag <=0;
  end
  else begin
    flag <=flag;
  end
end
reg  doutr;
always @(posedge clk or negedge rst_n)begin
  if(rst_n==0)begin
    doutr<=0;
  end
  else if(state_c==S3)begin
    doutr<=0;
  end
  else if(end_cnt==1)begin
    doutr<=0;
  end
  else if(cnt==x-1 && flag==1)begin
    doutr<=1;
  end
end
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
    dout<=0;
  end
  else begin
    dout<=doutr;
  end
end
endmodule

image.png

题目12


image.png

题目12答案


思路类似第一题

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
reg [2-1: 0] dout;
assign add_cnt = dout == 2;       
assign end_cnt = add_cnt && cnt== 5-1;   
always  @(posedge clk or negedge rst_n)begin
    if(rst_n == 1'b0)begin
        dout<= 0;
    end
    else if(en==1)begin
        dout<= 2;
    end
    else if(end_cnt==1)begin
        dout<= 0;
    end
end
目录
相关文章
|
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