1.module

  • module有出入接口,输出接口
  • module有时钟和复位
// input
clock;
rest_n; // n表示低电平复位 //output
o_data;
module module_a(
// module是关键字表示声明一个模块
// module module名
// module .. endmodule是一对
// module module_name(模块的输入输出列表);
// 输入只能是wire变量,只有线才能连入module
// 输出可以是wire类型也可以是reg类型,一般是reg变量
// 不写位宽,默认是1bit位宽的
input wire clk,
input wire rest_n,
output reg [7:0] o_data // 8bit数据
); endmodule
module Lut_m(
input wire sclk,
input wire rst_n,
input wire [9:0] i_data,
input wire [15:0] i_sin, output reg [15:0] o_cos,
output reg o_div_clk,
output reg [9:0] div_clk, // module中包含子module
// 嵌套子模块,就是例化,首先要先将子模块写成单独的模块
// 例化:先写模块的名字 例化的名字
sub_m u_sub_m (
// 如何引入接口
//用点的方式先写模块的接口(接入的接口)
.sclk (sclk),
.rst_n (rst_n),
.i_data (i_data),
.i_sin (i_sin),
.o_cos (o_cos),
.o_data (o_data)
); sub_n u_sub_n(
.sclk (sclk),
.rst_n (rst_n),
.i_data (i_data),
.i_sin (i_sin),
.o_data (o_data)
);
); endmodule

2.分频器

// 输入50MHz,二分频
module div_clk(
input wire sclk,
input wire rst_n,
output reg div_clk_o
);
// 分频器,需要一个计数器,二分频,需要记录01状态,1bit
// div_cnt就是一个计数器
// 计数器为0的时候,输出为低,计数器为1的时候,输出为高
reg div_cnt; //寄存器使用always语句进行赋值的
// 这是一种异步复位的写法
// 在时钟上升沿的时候触发逻辑
// 复位使用作用下实现复位逻辑 // 计数器逻辑
always@(posedge sclk or negedge rst_n)
begin
if(rst_n == 1'b0)
begin
div_cnt <= 1'b0;
end
else begin
div_cnt <= div_cnt + 1'b0;
end
end // 产生div_sclk_o
always@(posedge sclk or negedge rst_n) begin
if(rst == 1'b0) begin
div_cnt <= 1'b0;
end
else if(div_cnt == 0) begin
div_clk_o <= 1;
end
else
div_clk_o <= 0;
end
endmodule
  • div_cnt = 0的时候,给输出赋值1,下一个时钟上升沿就可以输出1
  • div_cnt = 1的时候,给输出赋值0,下一个时钟上升沿就可以输出0

    在时序电路里,一般系统时钟都是高频的,不同外设对时钟频率的要求不同,所以需要通过分频来获得相应的时钟频率,一般都是将高频的时钟转换为低频的时钟。最简单的分频就是2分频,也就是把时钟频率减半,输出时钟和输入时钟上升沿对齐,波形图是这样的:



    有遇到需要奇数分频的时候,这时候上升沿和下降沿都需要用到,3分频波形图是这样的:



    上面两张图都是50%占空比的,有的时候我们只需要用输出时钟的上升沿,不需要考虑下降沿,这样的话我们的输出时钟只需要是单脉冲的就可以了,设计的时候会简单很多,单脉冲的3分频波形图是这样的:

8分频 -- 4周期反转一次
4分频 -- 2周期反转一次 3分频 -- 1.5周期/3周期
5分频 -- 2.5周期/5周期
7分频 -- 3.5周期/7周期

后期会补充分频器和计数器的书写方式

01-module/分频器/激励写法的更多相关文章

  1. angular.js写法不规范导致错误

    以下写法:没有明确指定module和controller,写法不规范. 更改angular.js版本会出bug. <html ng-app> <head> <title& ...

  2. 0-1背包 VIOJ1025

    P1025小飞侠的游园方案 请 登录 后递交 标签:[显示标签] 描述 菜虫:你的题目是--我们的情报组织探听到敌人的重要将领--小飞侠星期天会邀他的灵儿妹妹到公园去玩.公园里有很多娱乐项目,可并不是 ...

  3. 前端模块化IIFE,commonjs,AMD,UMD,ES6 Module规范超详细讲解

    目录 为什么前端需要模块化 什么是模块 是什么IIFE 举个栗子 模块化标准 Commonjs 特征 IIFE中的例子用commonjs实现 AMD和RequireJS 如何定义一个模块 如何在入口文 ...

  4. 02-FPGA设计流程介绍——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线——普利斯队长精心奉献 课程目标: 1.了解并学会FPGA开发设计的整体流程 2.设计一个二选一选择器并进行功能仿真.时序仿真以及板级验证 实验平台:芯航线FPGA开发板.杜邦线 实验内容: 良 ...

  5. 小梅哥FPGA数字逻辑设计教程——基于线性序列机的TLC5620型DAC驱动设计

    基于线性序列机的TLC5620型DAC驱动设计 目录 TLC5620型DAC芯片概述:    2 TLC5620型DAC芯片引脚说明:    2 TLC5620型DAC芯片详细介绍:    3 TLC ...

  6. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  7. Magento控制器

    提到模型-视图-控制器这种MVC架构,要追溯到Smalltalk编程语言和Xerox Parc.从那个时候开始,就有许多系统将自己描述为MVC架构.这些系统虽然在某些地方有细微差别,但都实现了数据层, ...

  8. js实现reqire中的amd,cmd功能

    js实现reqire中的amd,cmd功能 ,大概实现了 路径和模块 引入等重要功能. 本帖属于原创,转载请出名出处. <!DOCTYPE html PUBLIC "-//W3C//D ...

  9. P1004 方格取数-洛谷luogu-dp动态规划

    题目描述 设有N \times NN×N的方格图(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A 0 0 0 0 0 0 0 0 ...

  10. ES6模块化操作

    在ES5中我们要进行模块化操作需要引入第三方类库,随着前后端分离,前端的业务日渐复杂,ES6为我们增加了模块化操作.模块化操作主要包括两个方面. export :负责进行模块化,也是模块的输出. im ...

随机推荐

  1. jextract的使用

    写这个博客的目的:新人去看jextract的官网是看不懂的,就算看懂了也不会使用,一头雾水,我会从0开始教如何使用,如何搭配java去调用c函数. 首先我们得了解jextract是什么,官网的解释是一 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (164)-- 算法导论13.1 4题

    四.用go语言,假设将一棵红黑树的每一个红结点"吸收"到它的黑色父结点中,使得红结点的子结点变成黑色父结点的子结点(忽略关键字的变化).当一个黑结点的所有红色子结点都被吸收后,它可 ...

  3. SpringBoot-MybatisPlus-Dynamic(多数据源)-springboot-mybatisplus-dynamic-duo-shu-ju-yuan-

    title: SpringBoot-MybatisPlus-Dynamic(多数据源) date: 2021-05-07 13:58:06.637 updated: 2021-12-26 17:43: ...

  4. Navicat Premium多用户破解方法 12以上版本

    https://www.cnblogs.com/cgqplus/p/15267306.html 本文不提供注册机或者破解工具,本论坛多的是,搜索一下就好了. 本方法适用于多用户环境下使用,比如在服务器 ...

  5. Java 集合(三)ConcurrentHashMap

    一般来讲,通常使用的 HashMap 不是线程安全的,因为没有任何机制来保证每个操作的原子性.在 ConcurrentHashMap 出现之前,可以通过给 HashMap 的每个操作加上唯一的互斥锁来 ...

  6. BFS(三)单词接龙 ⅱ

    对应 126. 单词接龙 II 问题描述 按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> ...

  7. 微信小程序实时噪声分贝

    为了做一个能够检测实时噪声分贝的小程序,网上找了很多例子,基本没有完整的代码,手写了一个,话不多说直接上效果图 实现实时录音的功能,并且能够根据声音分贝大小转动仪表盘显示实时的分贝,运用echart实 ...

  8. 【Python】人工智能-机器学习——不调库手撕贝叶斯分类问题

    1. 作业内容描述 1.1 背景 数据集大小150 该数据有4个属性,分别如下 Sepal.Length:花萼长度(cm) Sepal.Width:花萼宽度单位(cm) Petal.Length:花瓣 ...

  9. 毕昇 JDK:为啥是ARM 上超好用的 JDK

    摘要:毕昇 JDK 是华为基于 OpenJDK 定制的开源版本,是一款高性能.可用于生产环境的 OpenJDK 发行版. 本文分享自华为云社区<[云驻共创]毕昇 JDK:"传奇再现&q ...

  10. 收钱吧与火山引擎VeDI合作一年后 有了哪些新变化?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群     收钱吧正在和火山引擎数智平台(VeDI)跑出一条业务提效新通路.   相关数据显示,收钱吧的日服务人次就近 ...