verilog – 行为,RTL和门级之间的差异

2023-11-15

试图完全理解Verilog的抽象级别之间的差异,我得到了每个级别的描述,但我仍然无法在游戏中得到它.

 

对于这种情况,我将粘贴一些Verilog代码以及我对它们的看法:

>以下代码位于行为级别.

 

always  @ (a or b or sel)
  begin
    y = 0;
    if (sel == 0) begin
      y = a;
    end else begin
    y = b;
  end
end

>这(仅举例)是在门级

 

module test(clk,  ready, next, Q);
  input clk, enable, next;
  output Q;

  \**SEQGEN** reg_1 (.clear(1'b0), .next_state(next), .clocked_on(clk), .Q(Q), .synch_enable(enable) );

endmodule

>我不知道这个代码是在RTL还是门级(我希望always关键字使这个RTL而不是门级)

 

module dff_from_nand();
  wire Q,Q_BAR;
  reg D,CLK;

  nand U1 (X,D,CLK) ;
  nand U2 (Y,X,CLK) ;
  nand U3 (Q,Q_BAR,X);
  nand U4 (Q_BAR,Q,Y);

  // Testbench of above code
  initial begin
    $monitor("CLK = %b D = %b Q = %b Q_BAR = %b",CLK, D, Q, Q_BAR);
    CLK = 0;
    D = 0;
    #3  D = 1;
    #3  D = 0;
    #3  $finish;
  end   

  always  #2  CLK = ~CLK;

endmodule

我已经知道初始开始和结束不可合成,只是用于测试.现在我有2个问题

>第三(和第二)代码是RTL还是Gate-Leve?什么是一个很好的RTL代码示例?我发现这个RTL Code Example但是真的是RTL吗?对我来说,它看起来像行为水平.
>什么意味着Verilog网表?它与门级相同还是具有上下文基本定义?

我很困惑,因为在一些网站上我不知道他们是否说’这是一个使用逻辑门的Verilog代码’或’这是门级的Verilog代码’

如果有人想解释有关这个主题的更多细节,我将非常高兴:)

RTL:寄存器传输级,一种抽象硬件功能,使用always块编写,并分配可合成的语句(可以转换为门级).纯RTL不会实例化子模块. RTL可以包含指导合成器的子模块.结构RTL(仍称为RTL)是包含其他RTL模块的模块.示例:FSM(有限状态机)

 

 

always @* begin
  next_state = state;
  if (count>0) next_count = count - 1;
  case (state)
  IDLE :
    if(do_start) begin
      next_state = START;
      next_count = 2;
    end
  START :
    if (do_wait) begin
      next_count = count;
    end
    else if (count==0) begin
      next_state = RUN;
      next_count = count_from_input;
    end
  RUN :
    if (do_stop) begin
      next_state = IDLE;
    end
    if (do_wait) begin
      next_count = count;
    end
    else if (count==0) begin
      next_state = IDLE;
    end
  endcase
end
always @(posedge clk, negedge rst_n) begin
  if (!rst_n) begin
    count <= 0;
    state <= IDLE;
  end
  else begin
    count <= next_count;
    state <= next_state;
  end
end

行为:模仿硬件的所需功能,但不一定是可综合的.只要代码生成所需的行为,就没有严格的规则.准则是保持简单和可读.行为通常用于表示模拟块,占位符代码(RTL /门未准备好)和测试平台代码.示例:时钟发生器,延迟单元.

 

always begin
  if (!clk_en && clk==1'b1) begin
    wait (clk_en);
  end
  #5 clk = ~clk;
end

RTL和Behavioral之间的关键区别在于合成的能力.如果您看到#delay,wait语句,while循环,强制/释放语句或分层引用,那就是行为.从技术上讲,有一些罕见的可疑异常,但如果这个问题,这超出了范围.

门级(又称结构):仅由门和模块描述的逻辑.不总是阻止或分配语句.这是硬件中真实门的代表.

Verilog Netlist是设计中使用的Verilog模块的集合.它可以是一个或多个文件.它可以是RTL,Behavioral和Structural的混合体.通常它主要是结构,特别是对于大型设计.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

verilog – 行为,RTL和门级之间的差异 的相关文章

  • 高处理器使用率下的 WCF 和线程池响应能力

    我们在控制使用 WCF 发送启动 停止命令的长时间运行进程时遇到问题 问题似乎是当CPU负载较高时WCF不响应请求 不幸的是 对于相关应用程序来说 尽可能多的内核上的高 CPU 是必要的 因为它需要执行大量的数值计算 该问题是否与使用 WC
  • 检测处理器的数量

    如何检测 net 中物理处理器 核心的数量 System Environment ProcessorCount 返回逻辑处理器的数量 http msdn microsoft com en us library system environm
  • Delphi 2010-IDE 不断停止在 CPU 调试窗口

    我在 D2010 IDE 中不断出现 CPU 调试窗口 我注意到这出现在一些断点上 而其他一些断点则不会导致这种效果 无法解释这种情况到底何时发生或哪些断点导致这种情况 但似乎当调试器无法到达代码上的断点时 它会停止在方法的开始地址上 并且
  • 为什么负载不能绕过同一核心上的另一个线程从写入缓冲区写入的值?

    如果CPU核心使用写缓冲区 则负载可以从写缓冲区绕过最近的存储到引用的位置 而无需等到它出现在缓存中 但是 正如它所写的记忆一致性和连贯性入门 https lagunita stanford edu c4x Engineering CS31
  • 了解CPU寄存器

    我是汇编语言的初学者 并试图理解这些都是如何工作的 我的问题可能看起来很愚蠢 但无论如何 我不太清楚 考虑以下简单的程序 section text global start start mov eax text mov val eax mo
  • Python CPU 计数在一台 Windows 服务器上工作但在另一台服务器上不起作用?

    我编写的代码可以在 Windows XP 和 Windows Server 2008 64 位上运行 但是 我刚刚启动了 Amazon Windows 64 位实例 代码失败 非常简单 看起来像这样 import multiprocessi
  • GRUB 是否切换到保护模式?

    我想问一下 启动时将CPU切换到保护模式是GRUB还是Linux内核 我还想问 内核本身 vmlinuz 是 ELF 还是纯二进制格式 谢谢 GRUB does让你进入保护模式 GRUB多重引导规范 版本 0 6 96 第 3 2 节 ht
  • 如何通过.NET Core查找物理CPU核心数(不是逻辑SMT超线程)?

    我想检测实际物理核心的数量 而不是逻辑核心的数量 因为当更多线程竞争私有每核心缓存时 工作负载会出现负扩展 和 或具有足够高的 IPC 每个核心运行多个逻辑线程不会吞吐量的增加超过线程开销的增加 特别是对于无法完美扩展到大量内核的问题 或者
  • OpenACC 是否会影响正常的 GPU 渲染?

    我试图弄清楚是否可以使用 OpenACC 代替正常的 CPU 串行执行调用 通常我的编程都是关于 3D 编程 或者以某种方式正常使用 GPU IE 图像处理或其他需要使用着色器的渲染类型 我想弄清楚这个图书馆是否对我有利 我问这个问题的原因
  • Tensorflow 相同的代码,但从 CPU 设备到 GPU 设备得到不同的结果

    我正在尝试实现一个程序来测试 GPU 设备上的 Tensorflow 性能 数据测试是MNIST数据 使用多层感知器 神经网络 进行监督训练 我跟着这个简单的例子 http gist github com nishidy 8176548ec
  • GCC对读/写指令的重新排序

    Linux 的同步原语 自旋锁 互斥锁 RCU 使用内存屏障指令来强制内存访问指令重新排序 这种重新排序可以由 CPU 本身完成 也可以由编译器完成 有人可以展示一些 GCC 生成的代码示例 其中完成了此类重新排序吗 我主要对 x86 感兴
  • 多处理和并行处理之间的比较

    有人能告诉我多处理和并行处理之间的确切区别吗 我有点困惑 感谢您的帮助 多重处理 多重处理是使用两个或多个中央处理单元 单个计算机系统中的 CPU 该术语还指 系统支持多个处理器和 或的能力 在他们之间分配任务的能力 并行处理 在计算机中
  • 如何获取 Java7 应用程序的 CPU、RAM 和网络使用情况

    我找到了这篇旧文章如何在 Java 中监控计算机的 cpu 内存和磁盘使用情况 https stackoverflow com questions 47177 how to monitor the computers cpu memory
  • Linux:如何对系统内存施加负载?

    我正在开发一个小功能 它可以让我的用户了解 CPU 的占用情况 我在用着cat proc loadavg 它返回众所周知的 3 个数字 我的问题是 当我正在开发时 CPU 目前没有做任何事情 有没有一种好方法可以在CPU上产生一些负载 我在
  • 哪种架构称为非均匀内存访问(NUMA)?

    根据wiki http en wikipedia org wiki Non uniform memory access 非均匀内存访问 NUMA 是一种用于多处理的计算机内存设计 其中内存访问时间取决于相对于处理器的内存位置 但尚不清楚它是
  • C++ 中的 CPUID 实现

    我想知道这里是否有人有一些可以从任何托管 net 语言引用的 C CPUID 实现的好示例 另外 如果情况并非如此 我是否应该注意 X86 和 X64 之间的某些实现差异 我想使用 CPUID 来获取运行我的软件的机器上的信息 崩溃报告等
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • 就 size_t 而言,“目标平台上最大可能对象的大小”是多少

    我正在阅读有关的文章size t在 C C 中http web archive org web 20081006073410 http www embedded com columns programmingpointers 2009001
  • 是否可以在VM内使用VMX CPU指令?

    VM guest 内部的进程是否有可能使用 VMX AMD V VT x CPU 指令 然后由外部 VMM 处理而不是直接在 CPU 上处理 Edit 假设外部VM使用VMX本身来管理其虚拟客户机 即它在Ring 1中运行 如果可能的话 是

随机推荐

  • httprunner startproject.....报错

    httprunner新版本新建框架报错 问题 一开始报 cmd命令输入 httprunner startproject demo cmd结果显示 usage httprunner h V run make 我尝试降低到V2的版本 后面直接输
  • VMware虚拟机添加新硬盘

    在windows Server 2008 R2虚拟机配置中新加一块硬盘 首先在主机配置界面 打开虚拟主机设置 gt 添加一个新的硬盘组件 gt 选择磁盘接口类型 gt 创建新磁盘 gt 分配磁盘空间 gt 下一步安装 具体操作流程看下图 注
  • ARMV8体系结构简介:AArch64系统级体系结构之编程模型(3)- 异常

    1 前言 本文介绍异常相关内容 包括异常类型 异常进入 异常返回 异常层次结构 异常的路由等 2 RESET ARMV8体系结构支持两种类型的RESET Cold reset Reset PE所有的逻辑 包括集成的debug功能 Warm
  • Netty 全网最详细的教程! 没有之一!

    Netty 入门 文章目录 Netty 入门 入门案例 1 服务器端代码 2 客户端代码 3 运行流程 组件解释 使用组件 EventLoop 创建一个EventLoopServer 创建一个Client 细分 EventLoopGroup
  • Kubernetes Pod 故障归类与排查方法

    1 Pod 概念 Pod是kubernetes集群中最小的部署和管理的基本单元 协同寻址 协同调度 Pod是一个或多个容器的集合 是一个或一组服务 进程 的抽象集合 Pod中可以共享网络和存储 可以简单理解为一个逻辑上的虚拟机 但并不是虚拟
  • vue 锚点双向滚动监听

  • 欧拉角,轴角,四元数与旋转矩阵详解

    入门小菜鸟 希望像做笔记记录自己学的东西 也希望能帮助到同样入门的人 更希望大佬们帮忙纠错啦 侵权立删 目录 一 欧拉角 1 静态定义 2 欧拉角的表示 3 欧拉角表示的优缺点 4 欧拉角的万向节死锁 静态不存在万向锁的问题 二 四元数 1
  • Junit单元测试1

    实验五 Junit单元测试1 1 实验目的 学习使用 JUnit4 X 进行单元测试 应用 JUnit4 X 进行单元测试 为工程项目中的类 设计测试类 并且运用白盒测试和黑盒测试方法为类中的方法设计足够充分的测试用例集 从而保证 每一个类
  • myeclipse找不到Deployment Assembly ,报错

    今天tomcat加载maven项目遇到错误 java lang ClassNotFoundException org springframework web context ContextLoaderListener 在网上查到解决方法 出
  • 雷厉风行——开启人工智能教育普及时代

    自二十一世纪伊始 我国一线城市已全面进入老龄化严重的趋势 国家急需聪明睿智 精力充沛的年轻人作为人才储备 要全方位的培养年轻人 必须从少儿时期开始抓起 人工智能教育可以启发少儿天马行空的想象力 抽丝剥茧的思维方式 艰苦奋斗的实干精神 格物斯
  • 【hello git】初识Git

    目录 一 简述Git 二 Linux 下 Git 的安装 CentOS 2 1 基本命令 2 2 示例 三 Linux 下 Git 的安装 ubuntu 3 1 基本命令 3 2 示例 一 简述Git Git 版本控制器 记录每次的修改以及
  • matlab第三章课后答案,matlab程序设计第三章课后习题答案推荐.doc

    matlab程序设计第三章课后习题答案推荐 窗体顶端 1 p138 第6题 在同一坐标轴中绘制下列两条曲线并标注两曲线交叉点 gt gt t 0 0 01 pi gt gt x1 t gt gt y1 2 x1 0 5 gt gt x2 s
  • 桥接路由器总是掉线_tplink路由器桥接掉线怎么办

    tplink是普联技术有限公司旗下的品牌 成立于1996年 是专门从事网络与通信终端设备研发 制造和行销的业内主流厂商 那么你知道tplink路由器桥接掉线的解决方法吗 下面是学习啦小编整理的一些关于tplink路由器桥接掉线的相关资料 供
  • 命令行参数格式介绍

    命令行参数 sys argv 命令行参数列表 getopt getopt argparse argparse例子 import argparse def cmd args argparse ArgumentParser descriptio
  • vue3弃用/deep/深度穿透

    使用css时 如果需要改变孙级样式需要用到 gt gt gt 穿透 scss中增加了 deep 功能来做样式穿透 vue项目中也可以写作 v deep vue3之后之前的穿透语法虽然暂时可以正常使用 但是在编译时会抛出异常 说明在不久的将来
  • SQL NOT EXISTS讲解 (详例助理解)

    首先我们要知道对于exists和not exists 的返回值都是真假 exists 如果子查询查询到了列那么就为假 not exists 如果子查询查询不到结果则返回值为真 下面来举例子来理解not exists 先给出三个表 stude
  • 如何在Linux中查看所有正在运行的进程

    你可以使用ps命令 它能显示当前运行中进程的相关信息 包括进程的PID Linux和UNIX都支持ps命令 显示所有运行中进程的相关信息 ps命令能提供一份当前进程的快照 如果你想状态可以自动刷新 可以使用top命令 ps命令 输入下面的p
  • el search 查询排序

    sort 与query是同级的 来源 https stackoverflow com questions 20974964 python custom scripting in elasticsearch sort score order
  • Android 加载gif图,Glide

    个人中心 DownLoad Android 可以使用 Glide Picasso Fresco 等第三方库来加载 gif 图 以 Glide 为例 可以按照以下步骤加载 gif 图 1 在 build gradle 文件中添加 Glide
  • verilog – 行为,RTL和门级之间的差异

    试图完全理解Verilog的抽象级别之间的差异 我得到了每个级别的描述 但我仍然无法在游戏中得到它 对于这种情况 我将粘贴一些Verilog代码以及我对它们的看法 gt 以下代码位于行为级别 always a or b or sel beg