Verilog基础:有符号数与无符号数的运算示例

需积分: 34 2 下载量 97 浏览量 更新于2024-07-12 收藏 1.63MB PPT 举报
"这篇资料是关于Verilog HDL在数字集成电路设计中的基础知识,特别是有符号数和无符号数的使用。课程由西安电子科技大学微电子学院的教师提供,并引用了一本名为《Verilog HDL数字集成电路设计原理与应用》的教材。资料中还提到了数字集成电路的发展历程和设计方法的演变,以及硬件描述语言(HDL)的重要性。" 在Verilog HDL中,有符号数和无符号数是两种基本的数据类型,它们在数字逻辑设计中扮演着关键角色。在示例2.3-2中,我们看到如何用Verilog进行基本的算术运算。模块`arith_tb`定义了两个寄存器`a`和`b`,分别有4位和3位宽。 首先,`a`被赋值为4'b1111,这在二进制下表示15,因为这是一个无符号数。同样,`b`被赋值为3'b011,表示3。在Verilog中,乘法运算`a*b`的结果是4'b1101,但由于`a`和`b`都是无符号数,高位溢出会被舍去,因此结果实际上等于十进制的45的低四位。除法运算`a/b`得到4'b0101,这是对45除以3的商。加法运算`a+b`的结果是4'b0010,即18的低四位。减法运算`a-b`是4'b1100,表示15减3的结果12。最后,取模运算`a%b`的结果为4'b0000,因为在二进制下没有余数。 Verilog HDL是一种硬件描述语言,它允许工程师用类似于编程语言的方式来描述数字逻辑系统。与传统的软件编程不同,Verilog描述的是硬件的行为和结构。它的出现极大地推动了数字集成电路设计的效率和可靠性,特别是在系统级设计(System-on-Chip, SoC)和IP复用的时代。 自20世纪70年代以来,数字集成电路经历了从以单元为基础的设计到以RTL(Register Transfer Level)综合为基础,再到以IP(Intellectual Property)核心为基础的演变。每个阶段都伴随着技术的进步和产业模式的转变。现在,Fundry主导的模式和IP的广泛应用已经成为集成电路设计的标准实践,这使得设计者能够复用已验证的模块,加速产品上市时间并降低风险。 HDL的引入,如Verilog,是受到高级编程语言(如C、FORTRAN和Pascal)的启发,旨在提高设计的抽象层次,使设计师能够更专注于系统的功能描述,而非底层的门级实现。这种抽象使得复杂的系统设计变得更加可管理和可验证。因此,理解和熟练掌握Verilog HDL对于现代微电子学的学生和工程师至关重要。

LIBRARY IEEE; --打开IEEE库 USE IEEE.STD_LOGIC_1164.ALL; --程序中有STD_LOGIC和STD_LOGIC_VECTOR数据类型,这两种数据类型都在STD_LOGIC_1164 --程序包中定义。 USE IEEE.STD_LOGIC_UNSIGNED.ALL; --程序中有“+”运算符,无符号数的算术运算在STD_LOGIC_UNSIGNED程序包中定义。 ENTITY BAIFENPING IS PORT( CLR,CLK_SOURCE: IN STD_LOGIC; --输入端口,数据类型为STD_LOGIC。 CLK_TARGET:OUT STD_LOGIC); --输出端口,数据类型为STD_LOGIC。 END ENTITY BAIFENPING; ARCHITECTURE RTL OF BAIFENPING IS SIGNAL CNT:STD_LOGIC_VECTOR(5 DOWNTO 0); CONSTANT M:INTEGER:=49; --设置一控制计数器的常量,该值为(分频数/2)-1 SIGNAL TMP:STD_LOGIC; --引入信号TMP,用来存储反相器输出结果,即输出信号 BEGIN PROCESS(CLK_SOURCE) --进程,其敏感信号为输入的时钟信号 BEGIN IF (CLR='0') THEN --如清零信号为低电平,五十进制计数器清零,中间信号置低电平; CNT<="000000";TMP<='0'; ELSIF(CLK_SOURCE'EVENT AND CLK_SOURCE='1')THEN--判断输入时钟信号有无上升沿到来 IF(CNT=M)THEN --输入信号有上升沿到来,且计数结果为49 TMP<=NOT TMP;CNT<="000000";--信号TMP反相,计数器清零 ELSE --输入信号有上升沿到来,计数结果不为49 CNT<=CNT+1; --信号TMP保持,计数结果加1 END IF; END IF; --输入时钟信号无上升沿到来,计数结果保持,信号TMP保持 END PROCESS; CLK_TARGET<=TMP; --将信号TMP的值赋值给输出 END ARCHITECTURE RTL;转换成Verilog代码

2023-07-08 上传