Verilog经典题(三)——偶分频、奇分频

2024-03-02 07:08
文章标签 经典 verilog 分频

本文主要是介绍Verilog经典题(三)——偶分频、奇分频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 偶分频
    • 思路(看着就知道咋写的快速回顾)
    • 代码
    • 波形
  • 奇分频
    • 思路
    • 代码
    • 波形

偶分频

占空比50%的偶分频

思路(看着就知道咋写的快速回顾)

  1. 参数DivNum定义几分频
  2. 输入clk,rst 输出oclk,中间计数器count,tmp
  3. 0 1 2 3 置高,4 5 6 7 置低
if(count == ((DivNum>>1) - 1)) begincount <= count + 1;	tmp     <= 1'b1;
end
else if(count == (DivNum - 1)) begincount	<= 0;tmp		<= 1'b0;	
end
elsecount <= count +1;

代码

Verilog

module evenfreq
#(parameter DivNum = 8
)(input clk,input rst,output oclk
);reg [2:0] count;reg  tmp;always @(posedge clk or negedge rst)beginif(!rst) begincount <= 0;tmp <= 0;endelse beginif (count == DivNum - 1) begincount <= 0;tmp <= 0;endelse if (count == (DivNum>>1) - 1)begincount <= count + 1 ;tmp <= 1;	endelse count <= count + 1 ;endendassign oclk = tmp;			
endmodule

tb

module evenfreq_tb();reg clk;reg rst;wire oclk;initial beginclk = 0;rst = 0;# 5 rst = 1;endinitial beginforever #5 clk = ~clk;end evenfreq tb1(.clk(clk),.rst(rst),.oclk(oclk));
endmodule

波形

在这里插入图片描述

奇分频

占空比为50%的奇分频

思路

  1. 参数DivNum用来设置分频数
  2. 用clk上升沿分频出“3高4低”的7分频tmp
    再用clk下降沿分频出“3高4低”的7分频tmp1
    将tmp与tmp1相或即可得到占空比50%的7分频oclk
  3. 输入clk,rst输出oclk
if(count1 == DivNum-1)begincount1 <= 0;tmp1 <= 0;
end
else if(count1 == (DivNum-1) >> 1)begincount1 <= count1 + 1;tmp1 <= 1;
end
else count1 <= count1 + 1;

代码

Verilog
代码中opsd,ongd,c1,c2为方便观看波形,实际输出并不需要

module oddfreq
#(parameter DivNum = 9
)
(input clk,input rst,output opsd, //上升沿控制输出output ongd, //下降沿控制输出output [DivNum:0]c1, //上升沿计数器output [DivNum:0]c2,  //下降沿计数器output oclk
);reg [DivNum:0] count1;reg [DivNum:0] count2;reg tmp1;reg tmp2;always @(posedge clk or negedge rst)beginif(!rst) begincount1 <= 0;tmp1 <= 0;endelse begin if(count1 == DivNum-1)begincount1 <= 0;tmp1 <= 0;endelse if(count1 == (DivNum-1) >> 1)begincount1 <= count1 + 1;tmp1 <= 1;endelse begin count1 <= count1 + 1;endendendalways @(negedge clk or negedge rst)beginif(!rst) begincount2 <= 0;tmp2 <= 0;endelse begin if(count2 == DivNum-1)begincount2 <= 0;tmp2 <= 0;endelse if(count2 == (DivNum-1) >> 1)begincount2 <= count2 + 1;tmp2 <= 1;endelse count2 <= count2 + 1;endendassign c1 = count1;assign c2 = count2;assign opsd = tmp1;assign ongd = tmp2;assign oclk = tmp1 || tmp2;
endmodule

tb

module oddfreq_tb();reg rst;reg clk;wire [7:0]c1;wire [7:0]c2;wire opsd;wire ongd;wire oclk;initial beginclk = 0;rst = 0;# 5 rst = 1;endinitial beginforever #5 clk = ~clk;end oddfreq tb1(.clk(clk),.rst(rst),.c1(c1),.c2(c2),.opsd(opsd),.ongd(ongd),.oclk(oclk));
endmodule

波形

在这里插入图片描述
参考https://blog.csdn.net/xvrixingkong/category_10393817.html

有没有大佬热心告知我波形能直接导出吗?截图好像有点low而且不太清楚。还有还有 为什么我的代码块没有颜色的区别??

这篇关于Verilog经典题(三)——偶分频、奇分频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765303

相关文章

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

数字电路专题:verilog 阻塞赋值和非阻塞赋值

verilog 阻塞赋值 和 非阻塞赋值 “=”阻塞赋值, ”<=”非阻塞赋值。阻塞赋值为执行完一条赋值语句,再执行下一条,可理解为顺序执行,而且赋值是立即执行; 非阻塞赋值可理解为并行执行,不考虑顺序,在 always 块语句执行完成后,才进行赋值。 如下面的阻塞赋值: //代码如下:module top(din,a,b,c,clk);input din;input clk;out

接口自动化三大经典难题

目录 一、接口项目不生成token怎么解决关联问题 1. Session机制 2. 基于IP或设备ID的绑定 3. 使用OAuth或第三方认证 4. 利用隐式传递的参数 5. 基于时间戳的签名验证 二、接口测试中网络问题导致无法通过怎么办 1. 重试机制 2. 设置超时时间 3. 使用模拟数据 4. 网络问题的预检测 5. 日志记录与错误分析 6. 切换网络环境 7.

嵌入式面试经典30问:一

什么是嵌入式系统? 嵌入式系统是指嵌入到某个对象体系中的专用计算机系统,它负责执行特定的任务,具有专用性、隐蔽性、资源受限和可靠性要求高等特点。通常包括硬件和软件两部分,硬件以微处理器为核心,软件则负责控制和管理硬件资源,实现特定的应用功能。 嵌入式系统和普通计算机系统有什么区别? 嵌入式系统与普通计算机系统的主要区别在于目的、资源、性能和成本等方面。嵌入式系统通常针对特定应用设计,具有体积小

Leetcode面试经典150题-2.两数相加

解法都在代码里,不懂就留言或者私信 理论上提交这个就是最优解 字节考过不下20次,这个高居字节面试榜第9名 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) {

systemverilog、verilog的部分常用内部函数

1. $ceil 作用:将给定的实数或浮点数向上取整。示例:$ceil(3.2) 返回 4。 2. $floor 作用:将给定的实数或浮点数向下取整。示例:$floor(3.9) 返回 3。 3. $value$plusargs 作用:从命令行读取传递给仿真器的参数。格式:$value$plusargs("格式", 变量),格式 用来匹配命令行的参数,变量 是用来存储匹配到的值。示例:$