首页 > 其他分享 >牛客进阶题目5:信号发生器

牛客进阶题目5:信号发生器

时间:2023-01-04 22:23:10浏览次数:32  
标签:20 进阶 19 方波 wave 锯齿 牛客 计数器 发生器

这个题目有点离谱,题里什么也没给,需要去题解中才知道方波、锯齿波和三角波最大值都为20,方波周期20,锯齿波周期21,三角波周期40

对三种波形具体分析

方波:周期为20且最大值也为20的方波,就是0-19的计数器,在0-9时wave输出0,在10-19wave输出20。

锯齿波:wave即为0-20计数器,在0-19过程中持续增加,在计数器为20时进行清零

三角波:wave为0-19和19到0的先加再减计数器,0-19过程中递增,19-0过程中递减。

波形里存在一个小三角,是陷阱,要求在从锯齿波或者方波切换到三角波时,默认在递减状态,减到0时才开始递增。

`timescale 1ns/1ns
module signal_generator(
	input clk,
	input rst_n,
	input [1:0] wave_choise,
	output reg [4:0]wave
	);
reg [4:0]	cyc_count ;
reg			flag	 ;

always @(posedge clk or negedge rst_n) begin
	if(!rst_n) 
		cyc_count <= 'd0 ;
	else if(wave_choise==2'd0) begin
		if(cyc_count == 5'd19)
			cyc_count <= 5'd0 ;
		else
			cyc_count <= cyc_count + 1;
	end
	else
		cyc_count <= 5'd0 ;
end

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		flag <= 1'b0 ;
	else if(wave_choise == 2'd2) begin
		if(wave == 5'd19)
			flag <= 1'b1 ;
		else if(wave == 5'd1)
			flag <= 1'b0 ;
		else
			flag <= flag ;
	end
	else begin
		if(wave == 5'd0 )
			flag <= 1'b0 ;
		else
			flag <= 1'b1 ;
	end
end

always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        wave<=0;
    else begin
        if (wave_choise==0) begin
            wave <= (cyc_count < 9) ? 0 : (cyc_count < 19 ? 20 : 0);
        end
        else if (wave_choise==1) begin
            wave <= (wave >= 20) ? 0 : wave+1;
        end
        else if (wave_choise==2) begin
            wave <= flag ? wave-1: wave+1;
        end
        else
            wave <= 0;
    end
end
endmodule

标签:20,进阶,19,方波,wave,锯齿,牛客,计数器,发生器
From: https://www.cnblogs.com/icwangpu/p/17026156.html

相关文章

  • 牛客小白月赛 64 D题
    https://ac.nowcoder.com/acm/problem/247496 1#include<bits/stdc++.h>2usingnamespacestd;34constintN=3e5+10;56typedeflonglongLL;......
  • 牛客进阶题目4:输入序列不连续的序列检测
    跟上一题基本类似,多了个valid判定当前输入数据是否有效`timescale1ns/1nsmodulesequence_detect( inputclk, inputrst_n, inputdata, inputdata_valid, outpu......
  • 牛客小白月赛 64 C题
    https://ac.nowcoder.com/acm/contest/50044/C 1#include<bits/stdc++.h>2usingnamespacestd;3//贪心构造我认为思路是其一,然后模拟这个过程还是比较重......
  • 牛客进阶题目3:不重叠序列检测
    还是移位寄存器,加一个计数器来限制周期题目要求状态机,懒得画了,移位寄存器可根据时序图直接写`timescale1ns/1nsmodulesequence_detect( inputclk, inputrst_n, i......
  • 牛客进阶题目2:含有无关项的序列检测
    跟上一题类似这里有人可能会用到casex,最好别用,有的工具可能不支持`timescale1ns/1nsmodulesequence_detect( inputclk, inputrst_n, inputa, outputregmatch......
  • 牛客进阶题目1:输入序列连续检测
    检测01110001序列,满足序列则拉高match可以用状态机和移位寄存器,懒得画状态转移图,直接用移位寄存器解注意题中match在检测到序列后的下一周期拉高,所以需要延一拍`timesca......
  • C++进阶(智能指针)
    智能指针原理C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻......
  • 算法竞赛进阶指南 0x43 线段树
    文章目录​​线段树简介​​​​线段树的简单代码实现​​​​建树代码​​​​修改操作​​​​查询操作​​​​线段树的查询操作的时间复杂度分析:​​​​[AcWing245.你......
  • 新建 Microsoft Office Word 文档 来源:牛客网
    题目链接:https://ac.nowcoder.com/acm/contest/28886/1015时间限制:C/C++1秒,其他语言2秒空间限制:C/C++32768K,其他语言65536K64bitIOFormat:%lld题目描述CSL正在学习......
  • 经商 来源:牛客网
    题目链接:https://ac.nowcoder.com/acm/contest/28886/1022时间限制:C/C++1秒,其他语言2秒空间限制:C/C++32768K,其他语言65536K64bitIOFormat:%lld题目描述小d是一个搞......