我是靠谱客的博主 鲜艳小甜瓜,最近开发中收集的这篇文章主要介绍Xilinx FPGA 笔面试问答题详解 - 第二章 Verilog HDL 语言与 Vivado第二章 Verilog HDL 语言与 Vivado,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第二章 Verilog HDL 语言与 Vivado

笔记

1. T触发器

  1. 对输入时钟信号进行2分频,等同于设计了一个T触发器;
    在这里插入图片描述

2. wire型变量和reg型变量

  1. wire主要起信号间连接作用,用以构成信号的传递或者形成组合逻辑。因为没有时序限制,wire的赋值语句通常和其他块语句并行执行;
  2. wire不保存状态,它的值可以随时改变,不受时钟信号限制;reg型变量可以保存值,但是使用的存储设备是寄存器;
  3. 除了可以在模块module内声明,所有模块的输入input 和输出output默认都是wire型的;
  4. wire要使用assign语句进行赋值,且要在时序控制always块外进行赋值; reg型常用来表示always块内的指定信号,代表触发器,因为触发器只能在时钟的有效边沿改变值。

3. 可综合语句与不可综合语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 可综合的变量类型

  1. reg
  2. wire
  3. integer
  4. 大多数的矢量类型(reg或者net)都被默认当做无符号数。integer和real是个例外,它们被默认为当做有符号数。
  5. 通常,real类型是不可综合的。

5. 如何避免引入锁存器

在这里插入图片描述
if (cpu_overheated) then shut_off_computer = 1;
if (~arrived) then keep_driving = ~gas_tank_empty

  • 除了你指定的情况以外,会发生些什么,答案是什么也不会发生,输出保持不变。而这往往就导致了电路的错误,所以说语法正确的代码不一定能产生合理的电路(组合逻辑+触发器)。

  • 输出保持不变,这就意味着电路需要记住当前状态,从而产生锁存器。组合逻辑(比如逻辑门)不能记住任何状态。

Warning (10240): ... inferring latch(es)

  • 上述这类警告通常情况下代表错误,除非锁存器是故意生成的。
  • 组合电路输出必须在所有输入的情况下都有值。这意味着必须需要else子句或着输出默认值。

错误:

always @(*) begin
    if (cpu_overheated)
       shut_off_computer = 1;
end

always @(*) begin
    if (~arrived)
       keep_driving = ~gas_tank_empty;
end

正确:

always @(*) begin
        if (cpu_overheated)
            shut_off_computer = 1;
        else
            shut_off_computer = 0;
    end

    always @(*) begin
        if (~arrived)
            keep_driving = ~gas_tank_empty;
        else
            keep_driving = ~arrived;
    end

最后

以上就是鲜艳小甜瓜为你收集整理的Xilinx FPGA 笔面试问答题详解 - 第二章 Verilog HDL 语言与 Vivado第二章 Verilog HDL 语言与 Vivado的全部内容,希望文章能够帮你解决Xilinx FPGA 笔面试问答题详解 - 第二章 Verilog HDL 语言与 Vivado第二章 Verilog HDL 语言与 Vivado所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部