verilog 之数字电路 寄存器,触发器。
我一直听说没有由code到circuit就只是入门了。实在没办法了。我想了一招,一个一个的写,然后看RTL,然后分析。这是第一篇。
1、触发器。


没有复位,置位。posedge clk 是触发沿时钟。一直输出8‘h55.
module test_io(
input clk,
input rst_n,
output [7:0] test,
input in
);
reg [7:0] test_r;
reg [7:0] t1;
always @(posedge clk) begin
test_r <= in;
end
assign test = test_r;
endmodule

如果位数不匹配:只匹配低位,高位为0.


同步复位,其实就是在d触发器输入端加一个选择器,是输入0还是in。现在可知选择器可以使用if描述。if还要详细的编写。


异步复位,在always中加入negedge rst_n,即是d触发器的清零使能端。

这是异步置位端,描述只要将0改为1即可。但是RTL却是如上图。可以推知这和器件有关。于是我将它们的编译报告做了比较:


可知在使用异步置位时多使用了一个total conmbinational functions。这就表明和具体的器件有关。要了解器件的结构。
always @(posedge clk) begin
if(!rst_n) begin
test_r <= 1;
end
else begin
test_r <= in;
end
end

同步置位。可知和同步复位没有结构上的差异。但是有一个问题我错了:就是在位数不匹配的时,是先匹配高位。即有8’h80.
always @(negedge clk) begin
if(!rst_n) begin
test_r <= 1;
end
else begin
test_r <= in;
end
end

对于下降沿触发的就是在前有o符号。比如在上图中。还有如果是低电平选择前也有o比如rst_n.


in成为d触发器的使能端。


此时d触发器也存在,我总结触发器存在的原因有二:1、需要同步输出。2、需要保持数据。只要有一个满足就会存在触发器。
总结:对于边沿触发的reg型,我认为到此结束了。
--------------------------------------------------------------------------------------------------------------------------------------------------------
现在描述电平敏感即always 中没有posedge or negedge.


可知此时的test_r被综合掉了。而只有一个选择器。而且电平clk接地了。还有我将clk改成rst_n也是一样的RTL.对于电平敏感的always块中,reg有可能根据实际的作用被综合掉。
always @(rst_n) begin
if(!rst_n) begin
test_r <= in;
end
end
assign test = test_r;

此时的RTL是锁存器。可知电平敏感的always将有可能产生锁存器。注意此时只有if没有else。这就可以知道了,在电平敏感的always中如果数据需要保持,就会产生锁存器,如果不需要保持就不会产生锁存器。这也是锁存器的功能,锁存数据。在也可以知道产生触发器,也是因为在always块中保持数据。如果不需要保持数据,也不会产生触发器。
always @(rst_n or clk) begin
if(!rst_n) begin
test_r <= in;
end
else if(clk) begin
test_r <= in_2;
end
else
test_r <= 1;
end

此时的数不需要保持,所以只有数据选择器。


由于需要保持数据,即有锁存器,根据描述产生清零端,使能端。


数据需要保持且产生置位端,使能端。
还有一点:我认为做这些不是要做到由RTL到代码。而是要做到,由代码到RTL。
verilog 之数字电路 寄存器,触发器。的更多相关文章
- verilog 之数字电路 边沿检测电路
由代码可知:此边沿检测电路是由两个触发器级联而成,sign_c_r 输出是sign_c_r2的输入.并且有异步复位端没有使能端.最后输出:由触发器的输出取反和直接输出相与.如下的RTL图.
- 使用verilog编写锁存器与触发器
需要注意的地方有四点: 1.关于锁存器与触发器在原理上的不同点,以及代码的不同点 2.关于高电平有效与低电平有效之前的区别 3.理解实现复位与实现D触发器之间的区别 4.理解同步与异步之间的区别 锁存 ...
- [FPGA]Verilog实现JK触发器组成的8421BCD码十进制计数器
目录 概述 电路分析 代码实现 参考文献 概述 本文以异步时序计数器为例,用Verilog实现以\(JK\)触发器组成的8421BCD码十进制异步计数器,并用ModelSim软件进行仿真验证. 电路分 ...
- FPGA SD 卡 之 乒乓操作 、同步fifo
这里记录一个实际的需要使用乒乓操作的例子:读sd卡数据的时,在spi的模式下.发送单数据块的读取命令,在回应之后会有 512字节的数据.使用乒乓操作,可以用两个八位的寄存器,就可以完成连续的512字节 ...
- setup/hold 分析
分析说明:D2:目的寄存器:D1:源寄存器: edge2:下一个时钟上升沿:edge1:当前时钟上升沿:edge0:当前时钟上升沿的前一个时钟沿:如下图: 建立时间:触发器D2(数据要到达目的的地方) ...
- DOS程序员手册(九)
第14章参考手册概述 本书余下的章节将向读者们介绍BIOS.DOS各种各样API函数和服务,作为一名程 序员,了解和掌握这些知识是很有好处的.在所介绍的参考手册中,每部手册都汇集了大 量的资源 ...
- Testbench代码设计技巧
Testbench代码设计技巧 " There are many ways " to code a test case, it all depens on the creativi ...
- E203 同步fifo
1. 输入端, 输入信号, i_vld,表示输入请求写同步fifo,如果fifo不满,则fifo发送i_rdy 到输入端,开始写fifo.i_vld和i_rdy是写握手信号. 2.输出端 o_rdy表 ...
- Verilog学习笔记简单功能实现(一)...............D触发器
module D_flop(data,clk,clr,q,qb); input data,clk,clr; output q,qb; wire a,b,c,d,e,f,ndata,nclk; nand ...
随机推荐
- 使用Sinopia搭建私有npm仓库
使用Sinopia搭建私有npm仓库 在用npm装包的时候,每次都要下载一大堆,慢且不说,npm还老被墙,所以就想到在公司内部搭建npm仓库镜像.大概看了几个,觉得Sinopia最简单也好用,所以就使 ...
- HAWQ + MADlib 玩转数据挖掘之(五)——奇异值分解实现推荐算法
一.奇异值分解简介 奇异值分解简称SVD(singular value decomposition),可以理解为:将一个比较复杂的矩阵用更小更简单的三个子矩阵的相乘来表示,这三个小矩阵描述了大矩阵重要 ...
- runtime 知识点
demo https://github.com/ZOYOOPlus/runtime2 // // ViewController.m // runtime // Copyright © 2017年 ...
- 安卓开发 报错 错误:This version of android studio is incompatible with the gradle version used. 的解决
本文的解决方法主要参考以下文章: https://blog.csdn.net/sinat_15417921/article/details/51907728 Android 开发总是会遇到各种不知道怎 ...
- Spring之基本关键策略
目的 为了简化Java开发. 策略 基于POJO(普通Java类)的轻量级和最小侵入性编程: 通过依赖注入(DI)和面向接口实现松耦合: 基于切面和惯例进行声明式编程: 通过切面和模板减少样板式代码. ...
- Hello Pythoner!
首先,欢迎你来到pyer的博客,希望你能有所收获! 然后,pyer之前学C#(原博客地址:初行-博客园),后来转的Python,目前从事服务端研发工作. 最后,相逢便是缘,如果看过pyer的博客后有什 ...
- ubuntu16.04 LTS grafana安装与启动
1.首先从官网上下载相应的包,网址为:http://grafana.org/download 2.安装 cd Downloads sudo dpkg -i grafana_4.1.2-14869897 ...
- Android HOOK工具Cydia Substrate使用详解
目录(?)[+] Substrate几个重要API介绍 MShookClassLoad MShookMethod 使用方法 短信监控实例 Cydia Substrate是一个代码修改平台.它可以修 ...
- javascript 小代码
if(!("a" in window)){ var a =1; } alert(a); //undefined var a = 1,b=function a (x){ x & ...
- 自己理解的java工厂模式,希望对大家有所帮助
[http://www.360doc.com/content/11/0824/17/3034429_142983837.shtml] 这两天突然想学学java源代码,不过看到一篇文章说看java源代码 ...