我一直听说没有由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 之数字电路 寄存器,触发器。的更多相关文章

  1. verilog 之数字电路 边沿检测电路

    由代码可知:此边沿检测电路是由两个触发器级联而成,sign_c_r 输出是sign_c_r2的输入.并且有异步复位端没有使能端.最后输出:由触发器的输出取反和直接输出相与.如下的RTL图.

  2. 使用verilog编写锁存器与触发器

    需要注意的地方有四点: 1.关于锁存器与触发器在原理上的不同点,以及代码的不同点 2.关于高电平有效与低电平有效之前的区别 3.理解实现复位与实现D触发器之间的区别 4.理解同步与异步之间的区别 锁存 ...

  3. [FPGA]Verilog实现JK触发器组成的8421BCD码十进制计数器

    目录 概述 电路分析 代码实现 参考文献 概述 本文以异步时序计数器为例,用Verilog实现以\(JK\)触发器组成的8421BCD码十进制异步计数器,并用ModelSim软件进行仿真验证. 电路分 ...

  4. FPGA SD 卡 之 乒乓操作 、同步fifo

    这里记录一个实际的需要使用乒乓操作的例子:读sd卡数据的时,在spi的模式下.发送单数据块的读取命令,在回应之后会有 512字节的数据.使用乒乓操作,可以用两个八位的寄存器,就可以完成连续的512字节 ...

  5. setup/hold 分析

    分析说明:D2:目的寄存器:D1:源寄存器: edge2:下一个时钟上升沿:edge1:当前时钟上升沿:edge0:当前时钟上升沿的前一个时钟沿:如下图: 建立时间:触发器D2(数据要到达目的的地方) ...

  6. DOS程序员手册(九)

    第14章参考手册概述     本书余下的章节将向读者们介绍BIOS.DOS各种各样API函数和服务,作为一名程 序员,了解和掌握这些知识是很有好处的.在所介绍的参考手册中,每部手册都汇集了大 量的资源 ...

  7. Testbench代码设计技巧

    Testbench代码设计技巧 " There are many ways " to code a test case, it all depens on the creativi ...

  8. E203 同步fifo

    1. 输入端, 输入信号, i_vld,表示输入请求写同步fifo,如果fifo不满,则fifo发送i_rdy 到输入端,开始写fifo.i_vld和i_rdy是写握手信号. 2.输出端 o_rdy表 ...

  9. 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 ...

随机推荐

  1. TypeError: pivot_table() got an unexpected keyword argument 'rows'

    利用Python进行数据分析>第二章,处理MovieLens 1M数据集,有句代码总是报错: mean_rating = data.pivot_table('rating', rows='tit ...

  2. Android6.0之后的权限机制对App开发的影响

    随着Android系统的更新换代,每次重大更新的方面也逐步扩展,从4.*主要是增强功能,到5.*主要是美化界面,到6.*主要提高系统安全性,再到7.*和8.*主要支撑各种大屏设备,因此开发者需要对每个 ...

  3. tableView 三级展开 嵌入collocationView

    目前有个需求,需要在写一个文件夹结构的类型,tableView分类显示 collocationView 遇到的问题是:tableView cell中嵌套了 collocationView 后,coll ...

  4. libcurl使用认证证书 https认证

    在server.xml中增加下面的内容: ciphers="SSL_RSA_WITH_RC4_128_SHA" 下面是libcurl 的测试代码: #include <std ...

  5. JavaScript class 使用

    /********************************************************************* * JavaScript class 使用 * 说明: * ...

  6. HDU1575 Tr A

    解题思路:矩阵快速幂模板题,见代码: #include<cstdio> #include<cstring> #include<algorithm> using na ...

  7. 判断IOS安装后是否是第一次启动

    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]){ [[NSUserDefaults s ...

  8. hiho1523 数组重排2

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个1-N的排列A1, A2, ... AN,每次操作小Hi可以选择一个数,把它放到数组的最左边. 请计算小Hi最少进 ...

  9. Google的跨平台开发高质量原生 UI 的移动 SDK---Flutter免费且开源

    Flutter开发 https://www.cnblogs.com/zengfp/p/9927860.html Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台 ...

  10. 剑指offer第二章

    剑指offer第二章 1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含 ...