FPGA中一些基本概念原理的区分

这篇具有很好参考价值的文章主要介绍了FPGA中一些基本概念原理的区分。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、wire型变量与reg变量

在 Verilog 中,wire 和 reg 是两种不同类型的变量,它们有着不同的特性和用途

1.1 wire 变量

  1. wire 变量用于连接模块中的输入、输出以及内部信号线。

  2. 它主要用于表示连续赋值的逻辑连接,类似于硬件电路中的导线。

  3. wire 变量不能在 always 块或 initial 块中赋值,它们只能通过连续赋值“assign”语句连接到其他信号,

1.2 reg 变量

  1. 它主要用于表示时序逻辑中的寄存器或存储单元。
  2. reg 变量可以在 always 块或 initial 块中赋值,用于描述时序逻辑的行为。

因此,wire 变量和 reg 变量的本质区别在于它们的用途和赋值方式。wire 主要用于连接信号,而 reg 主要用于存储时序逻辑的状态值。

1.3 使用场景

module ExampleModule(input a, input b, output c);
  
  // 使用 wire 连接输入和输出
  wire w1;
  assign w1 = a & b;  // 连接输入信号 a 和 b

  assign c = w1;  // 连接输出信号 c

  // 使用 reg 存储状态值
  reg [3:0] counter;  // 定义一个 4 位寄存器
  
  always @(posedge clk) begin
    if (reset) begin
      counter <= 4'b0000;  // 在上升沿时重置寄存器的值
    else
      counter <= counter + 1;  // 在上升沿时递增寄存器的值
    end
  end

endmodule

在这个示例中,wire 变量 w1 用于连接输入信号 a 和 b 到输出信号 c,而 reg 变量 counter 被用作一个 4 位的寄存器,用于存储时序逻辑中的状态值。wire 用于连接逻辑,而 reg 用于存储状态。

二、阻塞赋值与非阻塞赋值

2.1 阻塞赋值

·阻塞赋值使用“=”符号进行赋值。
·在 always 块中使用阻塞赋值时,会按照代码的顺序依次执行赋值语句。
·每次遇到阻塞赋值语句时,会立即计算并更新被赋值的变量。
·阻塞赋值会导致并发赋值,可能会引起意外的结果,特别是在多个赋值操作的情况下。

2.2 非阻塞赋值

·非阻塞赋值使用“<=”符号进行赋值。
·在 always 块中使用非阻塞赋值时,所有赋值语句会同时执行,但在时钟信号的边沿才会生效更新被赋值的变量。
·非阻塞赋值可以用于描述时序逻辑中的寄存器更新操作,确保时序逻辑的正确性。
·非阻塞赋值消除了并发赋值问题,避免了多个赋值操作之间的相互影响,提高了代码的可读性和可维护性。

2.3 使用场景

(1)阻塞赋值的使用情况:
·适用于组合逻辑电路或者需要立即更新变量值的情况。
·在同一个 always 块内多个赋值语句的情况下,可能会导致意外结果。
 

module blocking_example (
    input wire a,
    input wire b,
    output reg c
);

always @ (a, b)
begin
    // 阻塞赋值,立即更新变量值
    c = a & b;
end

endmodule


(2)非阻塞赋值的使用情况:
·适用于时序逻辑电路中需要保持状态稳定性的情况。
·用于在时钟信号的边沿更新寄存器值,避免并发赋值问题。


module non_blocking_example (
    input wire clk,
    input wire rst,
    input wire data,
    output reg reg_data
);

always @(posedge clk or posedge rst)
begin
    if (rst)
    begin
        // 重置寄存器值
        reg_data <= 0;
    end
    else
    begin
        // 非阻塞赋值,在时钟信号的边沿更新寄存器值
        reg_data <= data;
    end
end

endmodule


通过以上示例,可以看到阻塞赋值适用于需要立即更新变量值的情况,而非阻塞赋值适用于时序逻辑中需要保持状态稳定性的情况。在实际设计中,根据逻辑需求选择合适的赋值方式可以确保设计的正确性和性能。

三、常见条件语句

在Verilog中,常见的条件语句包括if语句、case语句和unique case语句。以下是它们的区别和用法:

3.1 if 语句

if语句用于在条件满足时执行特定的操作。
可以包含多个else if和else部分。
在每个时钟周期只能选择一个分支执行。


module if_statement_example (
    input wire a,
    output reg b
);

always @ (a)
begin
    if (a == 1)
        b = 1;
    else if (a == 0)
        b = 0;
    else
        b = 0; // 默认情况
end

endmodule

3.2 case 语句


case语句根据输入信号的不同值执行相应的操作。
可以使用case、casex或casez,分别表示精确匹配、模糊匹配X值、模糊匹配Z值。
每个case分支可以有多个值或范围。

module case_statement_example (
    input wire [1:0] opcode,
    output reg result
);

always @ (*)
begin
    case (opcode)
        2'b00: result = 4'b0000;
        2'b01: result = 4'b0011;
        2'b10: result = 4'b1111;
        default: result = 4'bXXXX; // 默认情况
    endcase
end

endmodule

  3.3 unique case 语句


unique case语句用于确保每个分支值都唯一,不会有重复的情况。
如果出现多个分支值相同的情况,编译器会报错。


module unique_case_statement_example (
    input wire [1:0] sel,
    output reg out
);

always @ (*)
begin
    unique case (sel)
        2'b00, 2'b01: out = 1;
        2'b10: out = 0;
        default: out = 0; // 默认情况
    endcase
end

endmodule

四、常见操作运算符

4.1 逻辑运算符

与(&):两个输入都为高时输出高,否则输出低。
或(|):两个输入至少有一个高时输出高。
非(~):对输入取反,即高变低,低变高。
异或(^):两个输入不同时为高或者不同时为低时输出高,否则输出低。

FPGA中一些基本概念原理的区分,fpga开发

4.2 算术运算符

加法(+):对两个数进行加法运算。
减法(-):对两个数进行减法运算。
乘法(*):对两个数进行乘法运算。
除法(/):对两个数进行除法运算,通常需要使用特殊的算法实现。FPGA中一些基本概念原理的区分,fpga开发

4.3 比较运算符

等于(==):判断两个操作数是否相等。
不等于(!=):判断两个操作数是否不相等。
大于(>):判断左操作数是否大于右操作数。
小于(<):判断左操作数是否小于右操作数。
大于等于(>=):判断左操作数是否大于等于右操作数。
小于等于(<=):判断左操作数是否小于等于右操作数。

FPGA中一些基本概念原理的区分,fpga开发

与‘==’不同,全等将x和z都当成确定的值进行比较,当表述完全相同时输出1;此外,在做全等比较时,对于两个比较位数不等的情况,不会像处理操作符‘==’那样作高位补0操作,而会直接判断两数据不等。

4.4 移位运算符

左移(<<):将操作数向左移动指定的位数,右侧空出的位用0填充。
右移(>>):将操作数向右移动指定的位数,左侧空出的位根据有符号或无符号右移来填充。

4.5 位运算符

与(&):按位与操作。
或(|):按位或操作。
非(~):按位取反操作。
异或(^):按位异或操作。文章来源地址https://www.toymoban.com/news/detail-833669.html

结尾语

后来啊,
新年到了,我就来了…
鞭炮响了,我就走了…
好像…我才是那年兽
2024-2-16
FPGA中一些基本概念原理的区分,fpga开发

到了这里,关于FPGA中一些基本概念原理的区分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】FPGA入门 —— 基本开发流程

    快速上手verilog语法 状态机,线性序列机 FPGA常见的设计方法 自己写代码,下载代码进行使用,使用厂家/第三方提供的IP核 常见接口设计 等等。。 学习时间:基础内容的学习 - 20*8h,啊啊啊我可以我能行,看来这个月我给把时间砸这上面了~~ 仿真两大作用:检查验证设计功能

    2024年02月11日
    浏览(51)
  • Fpga开发笔记(二):高云FPGA发开发软件Gowin和高云fpga基本开发过程

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135620590 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:《Fpga开发笔记(一):

    2024年01月16日
    浏览(71)
  • FPGA嵌入式开发一些Xilinx SDK库函数的理解

    最近在测试AXI Quad SPI这个IP核的端口时序,搭建BD后导出到硬件,在SDK中导入xspi_intr_example.c的源文件,在师兄的帮助下,浅浅研究了一下代码。 首先,需要修改源程序中的错误,参照CSDN文章:ZYNQ中断示例修改 做出以下修改: 此外,还要对中断驱动实例名称进行修改: 以下

    2024年02月12日
    浏览(49)
  • 【边学边记_11】——DDS基本原理与FPGA实现

    DDS(Direct Digital Synthesizer)即数字合成器 ,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现 频率 、 相位 以及 幅度 的数控调制,广泛应用于通信领域。 DDS 的基本结构主要由 相位累加器 、 相位调制器 、 波形数据

    2024年02月06日
    浏览(43)
  • FPGA的基本开发流程

    FPGA是一种可编程逻辑器件,与传统的硬连线电路不同,它具有高度的可编程性和灵活性。FPGA的设计方法包括硬件设计和软件设计两部分,硬件设计包括FPGA芯片电路、存储器、输入输出接口电路等等,软件设计则是HDL程序开发,以及软硬件的联调。 本文主要介绍FPGA设计的基

    2024年04月13日
    浏览(46)
  • FPGA开发基本流程详解

    FPGA是一种可编程逻辑器件,与传统的硬连线电路不同,它具有高度的可编程性和灵活性。FPGA的设计方法包括硬件设计和软件设计两部分,硬件设计包括FPGA芯片电路、存储器、输入输出接口电路等等,软件设计则是HDL程序开发,以及软硬件的联调。 本文主要介绍FPGA设计的基

    2024年02月05日
    浏览(37)
  • FPGA学习笔记-1 FPGA原理与开发流程

    注:笔记主要参考: B站 正点原子 教学视频“正点原子手把手教你学FPGA-基于达芬奇Pro开发板 Artix-7 XC7A35T/XC7A100T”。 小梅哥爱漂流 教学视频“【零基础轻松学习FPGA】小梅哥Xilinx FPGA基础入门到项目应用培训教程”。 B站搬运 “特权同学2020版《深入浅出玩转FPGA视频教程》

    2024年02月05日
    浏览(50)
  • 001_区分单片机、arm、DSP、FPGA(零基础也能区分)

    单片机是指一个集成在一个芯片上的完整计算机系统,最早的单片机由微处理器核心、存储器、输入输出端口和计时电路等基本部分组成。例如,Intel公司推出的第一款单片机是Intel 8048,它于1976年发布,包括一个8位的中央处理器、ROM、RAM、输入输出端口和计时电路等基本模

    2024年02月08日
    浏览(43)
  • CIC滤波器:原理、设计与FPGA开发

    CIC滤波器,全称为累积积分器滤波器(Cascaded Integrator-Comb Filter),是一种数字滤波器,通常在信号处理和通信系统中使用。本文将详细介绍CIC滤波器的原理、设计方法以及如何在FPGA上实现。 一、CIC滤波器原理 CIC滤波器由级联的积分器和组合器组成,其中积分器用于对输入信

    2024年02月04日
    浏览(51)
  • 【FPGA】分享一些FPGA高速信号处理相关的书籍

      在做FPGA工程师的这些年,买过好多书,也看过好多书,分享一下。         后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍 【FPGA】分享一些FPGA协同MATLAB开发的书籍  【FPGA】分享一些FPGA视频图像处理相关的书籍  【FPGA】分享一些FPGA高速信号处理相关的书籍

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包