从RTL视图到Verilog语言

曾经听过某位大牛都说:“当你的学习FPGA到一个境界的时候,你看到的硬件描述语言,将不再是单纯的语言,而是由一个个逻辑门组成的电路图,一旦达到这个境界,方能把代码写到极致!”

笔者是多么希望达到这种境界啊~~,可这种境界给笔者的感觉是那么的虚无缥缈。

前段时间笔者写了一篇名叫《关于FPGA(verilog)电平检测模块的易错点分析》的博客。我仔细看了看verilog对应的RTL视图,又将RTL视图与verilog对比,突然间略有感悟。

首先奉上笔者亲手绘制的逻辑图,呵呵~~请原谅它的丑陋。读者能从图直接想象对应出Verilog吗?

图中虚线左边:有一个输入A端口,输入时钟,复位信号和一个D触发器。

图中虚线右边:有两个非门和两个与门,和两个输出端口。

组合逻辑的输出与输入直接相关,时序逻辑的输出和原有状态也有关。

那么左边图就是我们常常所说的时序逻辑,而右边图就是组合逻辑。

先看看右边的视图,看看能不能把它想想成verilog,咦,似乎不难——不就是几个个输入经过几个非门和与门嘛。假设输入就叫F1和F2。

那么对图右边视图的上部分图而言:

wire  neg_edge  =  !F1 & F2;

那么对图右边视图的上部分图而言:

wire  pos_edge  =  F1 & !F2;

再看看左边的时序逻辑视图,我们发现F1和F2时序上是有关系的,F1与D触发器的输入直接相连,而F2与D触发器的输出直接相连。而对于D触发器而言,从输入到输出,从启动沿,到锁存沿。

F1和F2所间隔的正好是一个时钟周期(不考虑物理上的延时)。

好的,F1和F2的关系,我们也发现了。现在试着能不能根据左边的时序逻辑视图,写成Verilog时序逻辑。试试看,似乎也不难。

always @(posedge  CLK)//时序逻辑肯定少不了时钟,对吧~

begin

F1  <=  A;   //F1与输入A端口直接相连

F2  <=  F1;  //F2与F1相隔一个时钟周期

end

最后,我们看看整张图,脑子中想象Verilog代码,结果出现了。

always @(posedge  CLK or negedge RSTn)

if(!RSTn) begin  F1 <= 1’b0 ; F2 <= 1’b0 ; end//加上一个异步复位

else

begin

F1  <=  A;   //F1与输入A端口直接相连

F2  <=  F1;  //F2与F1相隔一个时钟周期

end

wire  neg_edge  =  !F1 & F2;

wire  pos_edge  =  F1 & !F2;

现在给笔者的感觉,就是不需要在死记硬背这个电平检测模块,因为迷迷糊糊,笔者的脑袋里似乎浮现出一幅图,这幅图在指引这笔者如何写这个模块。

其实还有一个更好的记忆方法:

F1 Current State;F2 Previous State,

那么,!F1 & F2 == 1  就必须是之前值是1,现在值是0,那么检测的自然是下降沿。

同理: F1 & !F2 == 1 就必须是之前值是0,现在值是1,那么检测的自然是上升沿。

总结:从看到verilog就能反映出逻辑视图(RTL),笔者感觉很难,这需要大量经验的积累;反之,从看到逻辑视图就能反映出verilog,笔者感觉相对较易。如果我们先从容易的下手,慢慢的积累经验。说不定哪一天也能达到那位大牛所说的境界,哈哈~~

2013-11-12

——宋桓公

从RTL视图到Verilog语言-转可乐豆原创的更多相关文章

  1. 【iCore、iCore2 双核心板】EPCS 实验(SPI Flash)(基于Verilog语言)

    _____________________________________ 深入交流QQ群: A: 204255896(1000人超级群,可加入) B: 165201798(500人超级群,满员) C ...

  2. 基于MATLAB2016b图形化设计自动生成Verilog语言的积分模块及其应用

    在电力电子变流器设备中,常常需要计算发电量,由于电力电子变流器设备一般是高频变流设备,所以发电量的计算几乎时实时功率的积分,此时就会用到一个积分模块.发电量计算的公式如下:Q=∫P. FPGA由于其并 ...

  3. Verilog语言实现并行(循环冗余码)CRC校验

    1 前言 (1)    什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能, ...

  4. Verilog语言:还真的是人格分裂的语言

    人气腹语术师天愿在现场披露了被人偶搭档夺取灵魂的腹语术师将妻子杀害的表演节目.天愿真的陷入了多重人格,命令自己杀害妻子和子的人偶的人格出现了.为了不(让自己)杀害和弟子登川有外遇的妻子,天愿提出委托想 ...

  5. Verilog 语言 001 --- 入门级 --- 编写一个半加器电路模块

    Verilog 语言编写一个 半加器 电路模块 半加器 的电路结构: S = A 异或 B C = A 与 B 1. 程序代码 module h_adder (A, B, SO, CO); input ...

  6. FPGA基础(verilog语言)——语法篇

    verilog语言简介 verilog语言是一种语法类似于c的语言,但是与c语言也有不同之处,比如: 1.verilog语言是并行的,每个always块都是同时执行,而c语言是顺序执行的 2.veri ...

  7. Verilog语言中的系统任务和系统函数

    Verilog语言中预先定义了一些任务和函数,用于完成一些特殊的功能,它们被称为系统任务和系统函数,这些函数大多数都是只能在Testbench仿真中使用的,使我们更方便的进行验证. `timescal ...

  8. FPGA基础(verilog语言)——语法篇(续1)

    上一篇文章提到了FPGA中一个模块基本结构,这篇文章开始介绍语法. 首先,我们学习一门语言都要从这门语言的单词学起,所以verilog中的关键词都有哪些呢?看下面: A:always.assign B ...

  9. Xilinx ISE14.1用Verilog语言实现一个半加器并测试

    <一>建立一个工程 注:Xilinx ISE的安装在此不再过多说明,网上有参考资料 1.打开软件进入如下界面 2.创建工程 File-->New Project 3.创建文件(我取名 ...

随机推荐

  1. opencv 5 图像转换(1 边缘检测)

    边缘检测 一般步骤 canny算子 步骤 canny函数 彩色canny #include<opencv2/opencv.hpp> #include<opencv2/highgui/ ...

  2. Composer依赖管理 – PHP的利器

    别再到处搜PHP类扩展包了,对于现代语言而言,包管理器基本上是标配.Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm.PHP 的则是 PEAR,不过 ...

  3. 将py文件打包为exe文件方法

    前提: pip是依赖python的,首先检查下windows机器上有没有安装python,或者有没有添加到环境变量中,如果都没有需要安装或者加入环境变量 安装pip 下载地址: https://pyp ...

  4. 全栈项目|小书架|微信小程序-登录及token鉴权

    小程序登录 之前也写过微信小程序登录的相关文章: 微信小程序~新版授权用户登录例子 微信小程序-携带Token无感知登录的网络请求方案 微信小程序开通云开发并利用云函数获取Openid 也可以通过官方 ...

  5. H3C交换机DHCP基础配置案例 v7版本

    一.需求 要求在Switch A上配置DHCP服务器功能实现:• 为网络内的客户端动态分配 10.1.1.0/24 网段内的 IP 地址.租用有效期限. DNS 信息.网关地址等配置信息:• 根据 S ...

  6. 小白学习python第一天,Pycharm破解与用法(持续更新)

    目录 Pycharm安装与破解及汉化 Pycharm安装 Pycharm破解 Pycharm汉化 Pycharm使用 添加作者.时间等信息 补充 @ Pycharm安装与破解及汉化 本人最近开始找到了 ...

  7. 题解-洛谷P2010-回文日期

    原题链接: https://www.luogu.org/problem/P2010 题目简述: 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后22位代表日期.显然:一个 ...

  8. windows和linux的开机顺序

    windows的开机顺序: 启动自检阶段---初始化启动阶段---Boot加载阶段---检测和配置硬件阶段---内核加载阶段---屏幕显示. linux的开机启动顺序: 加载Bios---读取MBR- ...

  9. webpack到底是干什么用的?

    转载于:https://segmentfault.com/a/1190000014148611?utm_source=tag-newest 概念问题一:什么是webpack和grunt和gulp有什么 ...

  10. 在Windows系统中构建还原ASP.NET Core 源码

    大家好,这几天试着从Github上拉取AspNetCore的源码,尝试着通过Visual Studio 打开,但是并不尽人意.我们需要去构建我们拉去的源代码,这样才可以通过VisualStudio可还 ...