verilog基本语法-时序逻辑基础-记忆单元

概述:

组合逻辑虽然可以构造各种功能电路,但是他有一个缺点就是输入改变时,输出会立即发生改变。因此历史信息不能被保存下来。两个能够保存信息的存储单元被设计出来,用于保存历史信息。一个是锁存器,另外一个是触发器。锁存器是电平敏感的,抗噪能力差,保存信息的准确性受到挑战。通常不会使用锁存器来保存信息,但是在FPGA中,保留了大量的锁存器的功能,这是因为触发器本身是由锁存器构造成的,保留锁存器功能并不会消耗FPGA的额外资源。触发器是边沿敏感的,信息修改只发送在时钟触发的边沿,时钟边沿通常非常短暂,数据修改的时间也非常短,避免了数据被外部干扰。这是设计级联时序逻辑电路非常重要的条件。本节主要介绍verilog构造这些存储单元的使用方法。

内容:

1.锁存器

2.触发器

3.寄存器

4.同步复位电路

5.异步复位电路

6.边沿检测电路

1. 锁存器

代码

module regtest(
	 input clk, // system clock 
	 input a, 
	 input b, 
	 output reg y, // output signal
	 output reg y1 // output signal
    );
	
always @ (*) begin
	/*if语句锁存器*/
	if (a == 1) 
		y = b ;
	/*case语句锁存器*/
	case ( a )
		0 : y1 = b ;
	endcase
end

endmodule

RTL结构图,锁存器基本结构D为输入,Q为输出,G为门控电路,不带o的G为高电平修改存储内容,带o的为低电平修改存储内容。此外存储器的clk时钟免疫。

技术原理图,锁存器在FPGA中命名为ld。

2. flip_flop触发器

代码

module regtest(
	 input clk, // system clock 
	 input rst_n, 
	 input a, 
	 output reg y, // output signal
	 output reg y1 // output signal
    );
	
always @ (posedge clk ) begin
	y <= a ;
end

endmodule

RTL结构图,触发器在FPGA中村委fd,D为输入,Q为输出,C为时钟,上升边沿有效,带o的为下降沿有效。

技术原理图,图中显示,除了输入增加了ibuf,输出增加了obuf缓存外,另外增加了bufgp时钟缓存。

3. 寄存器

一个数据往往不仅仅只由1bit构成,而是由多个bit构成,列表8bit层位byte,16bit称为short,32bit称为int,64bit称为..,等数据类型。把多个存储元素捆绑到一起,FPGA称为reg寄存器。他相当于C语言中的变量,它的数据可以修改,但是存储数据的电路不能修改。FPGA的寄存器可以由latch锁存器构成,也可以由flip_flop触发器构成,综合工具根据verilog语法判断,构造的电路是锁存器还是寄存器。

代码示例:

// 3. 寄存器
module regtest(
	 input clk, // system clock 
	 input rst_n,
	 input c,
	 input [7:0] ain,
	 input [7:0] bin,
	 output reg [7:0] aByte,
	 output reg [7:0] bByte	 
    );

// 构造触发器寄存器
always @ (posedge clk ) begin
	aByte <= ain ;
end

// 构造锁存器寄存器
always @ (* ) begin
	if(c) begin 
		bByte = bin ;
	end
end

endmodule

RTL结构图

技术原理图,由图可知,锁存器reg由一系列的latch电路构成,触发器reg由一系列的flip_flop构成。

3. 同步复位

代码

module regtest(
	 input clk, // system clock 
	 input rst_n,
	 input  ain,
	 output reg areg
 
    );

// 构造触发器寄存器
always @ (posedge clk ) begin
	if(rst_n==0) begin
		areg <= 0 ;
	end else begin 
		areg <= ain ;
	end
end

endmodule

RTL结构图,同步复位使用的是fdr触发器。

技术原理图

4. 异步复位

代码

module regtest(
	 input clk, // system clock 
	 input rst_n,
	 input  ain,
	 output reg areg
 
    );

always @ (posedge clk or negedge rst_n ) begin
	if(rst_n==0) begin
		areg <= 0 ;
	end else begin 
		areg <= ain ;
	end
end

endmodule

RTL结构图,异步复位FPGA使用的是FDC触发器

技术原理图

5. 边沿检测电路

代码

module regtest(
	input clk , // system clock 50Mhz on board
	input rst_n, // system rst, low active 
	input a , 

	output y1 , // output signal
	output y2 , // output signal
	output y3 // output signal
 
    );
reg a_dly1 ;

always @ (posedge clk or negedge rst_n ) begin
	if (rst_n == 1'b0)
		a_dly1 <= 1'b0 ;
	else 
		a_dly1 <= a ;
end

assign y1 = a & ( ~a_dly1 ) ; 
assign y2 = ~a & a_dly1 ; 
assign y3 = a ^ a_dly1 ;


endmodule

RTL结构图,使用一个同步复位触发器fdc构成寄存器,对输入数据进行一个时钟延时,延时后的结果与数据进行逻辑运算,分别得到上升沿,下降沿,以及双边沿标志位。

技术原理图,触发器使用fdc实现,组合逻辑电路使用Lut查找表实现。所有的时序逻辑都可以看成式组合逻辑与触发器的组合。

6 总结

1. FPGA的存储元素可以由锁存器或者触发器来实现

2. 寄存器代表这存储元素,相当于c语言的变量,数据可以修改,存储数据的电路不能被修改。

3. FDGA提供同步复位触发器和异步触发器,并且保留锁存器,但是一般都不使用。

4. 所有时序逻辑都可以由组合电路+触发器来实现,FPGA的神秘面纱被解开了。他的本质就是用LUT来设计特点组合逻辑功能电路,通过触发器+LUT来设计时序逻辑电路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(基础篇)通过node增删改查连接mysql数据库

一定要会最基础的sql建表一定要会最基础的sql建表一定要会最基础的sql建表 首先说一下准备工作 一、准备工具 1.mysql数据库Navicat可视化工具&#xff08;数据库表单已经建好&#xff09; 我这里用的小皮工具直接开启的本地mysql 2.vscode (不用说基本上都有) 3.node.js …

仿牛客论坛的一些细节改进

私信列表的会话头像链接到个人主页 原来的不足 点击私信列表的会话头像应该要能跳转到该目标对象的个人主页。 原来的代码&#xff1a; <a href"profile.html"><img th:src"${map.target.headerUrl}" class"mr-4 rounded-circle user-he…

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黄金正弦算法4.实验参数设定5.算法结果6.…

web前端实现LED功能、液晶显示时间、数字

MENU 效果演示html部分JavaScript部分css部分 效果演示 html部分 <div id"app"><!-- 页面 --><div class"time-box"><!-- 时 --><div class"house-box"><bit-component :num"houseTem"></bit…

【MODBUS】Modbus是什么?

Modbus协议&#xff0c;从字面理解它包括Mod和Bus两部分&#xff0c;首先它是一种bus&#xff0c;即总线协议&#xff0c;和12C、SP|类似&#xff0c;总线就意味着有主机&#xff0c;有从机&#xff0c;这些设备在同一条总线上。 Modbus支持单主机&#xff0c;多个从机&#xf…

Colorful Grid Codeforces Round 910 (Div. 2) C

Problem - C - Codeforces 题目大意&#xff1a;有一个n*m的网格&#xff0c;要求从(1,1)走到(n,m)&#xff0c;同时要求路径的长度必须为k1&#xff0c;然后给每个两点之间的路径染成红色或蓝色&#xff0c;要求任意两个相邻线段颜色不能相同&#xff0c;求涂色的方案 3<…

将程序注册为系统服务

cmd中执行命令&#xff1a; sc create Redis binpath "C:\guet_run1\Redis-x64-5.0.14.1\redis-server.exe" type own start auto displayname "Redis"注意&#xff0c;命令中所有的等号和值之间需要一个空格&#xff08;等号前不要空格&#xff0c;等号后…

Linux---查看命令帮助

1. 查看命令帮助方式 --help 使用说明: 命令 --helpman 使用说明: man 命令 查看命令帮助的目的说明: 查看命令帮助目的是查看命令选项信息的 --help效果图: man效果图: man命令的说明: 操作键说明空格显示下一屏信息回车显示下一行信息b显示上一屏信息f显示下一屏信息q退…

[c++] 意识需要转变的一个例子,全局变量的构造函数先于main执行

最近还遇到一个例子是关于&#xff1a;从C转C开发需要注意的一个意识问题。本人遇到的这个问题是&#xff0c;带着C的意识来看C的代码&#xff0c;然后根据代码看&#xff0c;有一个全局变量的值在main函数进入之后才会更改&#xff0c;所以百思不得其解&#xff0c;这个变量怎…

RK3568平台 OTA升级原理

一.前言 在迅速变化和发展的物联网市场&#xff0c;新的产品需求不断涌现&#xff0c;因此对于智能硬件设备的更新需求就变得空前高涨&#xff0c;设备不再像传统设备一样一经出售就不再变更。为了快速响应市场需求&#xff0c;一个技术变得极为重要&#xff0c;即OTA空中下载…

ES中根据主键_id查询记录

一、需求 es中_type&#xff1a;_doc&#xff0c;想要根据主键_id查询记录 二、实现 复合查询中使用语句查询http://192.168.1.1/_doc/1

智能分析/可视化安防监控系统EasyCVR风光互补远程视频监控方案

一、背景需求 在一些偏远地区&#xff0c;也具有视频监控的需求。但是这类场景中&#xff0c;一般无法就近获取市电&#xff0c;如果要长距离拉取市电&#xff0c;建设的成本非常高且长距离传输有安全隐患&#xff0c;因此风光互补远程视频监控方案的需求也较多。利用风光电转…

将创建表字段语句快速转换成golang struct字段

用网页jquery快速生成 本地建立 struct.html <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>leo-转换</title> <script src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></s…

代码审计是什么,为什么需要代码审计

随着软件开发技术的不断发展&#xff0c;代码审计变得越来越重要&#xff0c;因为它可以帮助帮助企业从安全角度对应用系统的所有逻辑路径进行测试&#xff0c;通过分析源代码&#xff0c;充分挖掘代码中存在的安全缺陷以及规范性缺陷。找到普通安全测试所无法发现的如二次注入…

Visual Studio Code中tasks.json全局任务命令选项CommandOptions配置介绍

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 从官方文档可见&#xff0c;一个vscode典型的task.json文件包含多种属性&#xff0c;格式复杂&#xff0c;任务可以分为全局任务和局部可选任务&#xff0c;在tasks.json一级配置的 任务为全局任务…

STM32-02-STM32基础知识

文章目录 STM32基础知识1. STM32F103系统架构2. STM32寻址范围3. 存储器映射4. 寄存器映射 STM32基础知识 1. STM32F103系统架构 STM32F103 STM32F103是ST公司基于ARM授权Cortex M3内核而设计的一款芯片&#xff0c;而Cortex M内核使用的是ARM v7-M架构&#xff0c;是为了替代…

Tensorboard可视化远程服务器上保存的训练文件

方法一&#xff1a; 最简单的&#xff0c;把服务器上的训练权重文件下载到本地&#xff0c;使用本地的tensorboard打开 方法二&#xff1a; 使用VsCode的remote ssh插件&#xff0c;可以通过端口映射&#xff0c;将远程的6006端口映射到本地&#xff0c;直接访本地的6006即可…

【图论】普利姆算法,最小生成树

一次加入一个节点到我们的最下生成树中。加入哪个&#xff1f;跟着下面的步骤走一遍你就会了。 1. 把第一个节点A添加进来 2. 看两条边<A,B>,<A,E>,一个长度是3&#xff0c;一个长度是4&#xff0c;把长度短的边的另一个节点添加进来&#xff0c;也就是B 3. 再看A,…

多线程------ThreadLocal详解

目录 1. 什么是 ThreadLocal&#xff1f; 2. 如何使用 ThreadLocal&#xff1f; 3. ThreadLocal 的作用 4. ThreadLocal 的应用场景 5. ThreadLocal 的注意事项 我的其他博客 ThreadLocal 是 Java 中一个很有用的类&#xff0c;它提供了线程局部变量的支持。线程局部变量…

LangChain学习二:提示-实战(上半部分)

文章目录 上一节内容&#xff1a;LangChain学习一&#xff1a;模型-实战学习目标&#xff1a;提示词及提示词模板的运用学习内容一&#xff1a;什么是提示词&#xff1f;学习内容二&#xff1a;提示词模板2.1 入门2.2 模板格式2.3 验证模板2.4 序列化提示模板2.5 将少量示例传递…