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. lottie 动画在 vue 中的使用

    前言 最近我所负责的项目中,我采用了动画效果,并开始使用 gif 来实现.然而,在实践过程中,我发现 gif 格式的动画在 git 中出现了明显的锯齿感,这让我非常困扰.为了追求更完美的表现效果,我最 ...

  2. JPA object references an unsaved transient instance - save the transient instance before flushing

    nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.Transi ...

  3. centos7 安装 mysqlclient 报错

    报错如下: 解决方法: 先安装依赖: yum install mysql-devel 再安装: pip3 install mysqlclient

  4. Golang 命名返回值和普通返回值

    1.概述 在Go语言中,函数可以有命名返回值和普通(匿名)返回值.命名返回值会被视为定义在函数顶部的变量,并且在使用 return 语句返回时,不再必须在其后面指定参数名,也就是支持"裸&q ...

  5. 为什么匿名内部类可以实例化并实现抽象方法?lambda表达式是简化了匿名内部类的实现过程吗?

    为什么匿名内部类可以实例化并实现抽象方法? 在Java中,接口是一种特殊的抽象类型,它只定义了一个或多个抽象方法.接口不能被实例化,但是我们可以使用匿名内部类来实现接口并创建一个具体的对象. 匿名内部 ...

  6. 一些JavaSE学习过程中的思路整理(三)(主观性强,持续更新中...)

    目录 一些JavaSE学习过程中的思路整理(三)(主观性强,持续更新中...) Java线程同步的几种常见情况分析 由简单到复杂的几种单例模式写法 死锁的实现与破解 使用lambda表达式化简代码 J ...

  7. mac phpbrew安装

    php 编译安装php 7.2.26 aliyun 镜像中心:https://developer.aliyun.com/mirror/ 1.安装brew /usr/bin/ruby -e " ...

  8. Java 打印Excel工作表

    示例要点 本文介绍如何通过Java程序打印Excel工作表.可通过以下方法打印: 默认打印机打印 指定打印机打印 程序环境 spire.xls.jar JDK版本要求1.6.0及以上的高版本 IDEA ...

  9. 连Python都不熟也能跑通AI人脸识别?“隐藏Boss”竟是它!

    摘要:先把AI人脸识别跑起来,然后研究它是如何实现的,整个过程中确实收获不少.所谓先跟着做,再跟着学,实践与理论结合,自己感觉有理解了一些基础概念入个门,在此分享一下自己的捣鼓经验. 1.买台小&qu ...

  10. AI辅助宫颈癌筛查技术全球居首,守护者的力量来源是?

    宫颈癌,是常见的妇科恶性肿瘤.宫颈癌发病率在妇科恶性肿瘤中仅次于乳腺癌,但同时也是医学界公认的病因明确,预防有疫苗.且早期治愈率高的病症!病理形态学诊断被医学界公认为疾病诊断的"金标准&qu ...