自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 建立testbench

但是,如果希望在initial里多次运行一个语句块,可以在initial里嵌入循环语句(如while、repeat、for和forever等),比如。为了验证设计模块功能的正确性,我们通常需要在testbench中编写一些激励给设计模块,同时观察这些激励在设计模块(DUV)中的响应是否与我们的期望值一致。我们不仅需要产生时钟信号和复位信号,而且还需要编写一系列的仿真向量,同时观察DUV的响应,确认仿真结果。这里需要提醒的是,驱动双向信号的也一定是一个三态的线网,而不能是寄存器类型,否则就会发生冲突。

2023-04-13 10:55:26 314

原创 仿真和验证

仿真因EDA工具和设计复杂度的不同而略有不同,对于简单的设计,特别是一些小规模的CPLD设计来说,一般可以直接使用开发工具内嵌的仿真波形工具绘制激励,然后进行功能仿真。简单来说,在仿真的时候testbench用来产生测试激励给待验证设计(DUV),或者称为待测设计(DUT),同时检查DUV的输出是否与预期的一致,达到验证设计功能的目的。设计的过程实际是从一种形式到另一种形式的转换,比如从设计规格(specification)到RTL代码,从RTL代码到门级网表,,从网表到版图等。什么是testbench。

2023-04-12 10:16:10 1252

原创 避免亚稳态的方法

在最简单的情况下,设计人员可以通过确保时钟周期足够长来避免亚稳态,这个时钟周期要大于准稳态的解析时间,也要大于通往下一级触发器的路径上的任何逻辑延迟。图中所示的触发器“FFB”和”FFC”都在时钟下降沿触发,这样做是为了捕捉FFA的亚稳态事件。当两个互补的信号分别传递到“FFB”和“FFC”的输入时,无论“FFA”什么时候出现亚稳态事件,异或非(XNOR)门的输出都会变为高电平。多级同步器的一个局限就是系统需要花费较长的时间去响应异步输入,解决这个问题的办法就是使用倍频时钟作为两个同步触发器的时钟输入。

2023-04-11 10:22:32 619

原创 亚稳态理论

触发器的运转类似于在光滑的山上滚打球,山的两边代表两个稳定状态(即高和低),山顶就代表亚稳态。假设球处在一个稳定的状态(即1和0),给球一个足够(满足建立和保持时间要求)的推力(状态转换),使这个球在规定时间内越过山顶到达另一个稳定的状态。然而,如果推力不够(即违反建立和保持时间),这个球就会到达山顶(即输出亚稳态),停留一段时间后再返回到一个稳定的状态(即最终输出稳定)。当触发器处在亚稳态时,输出会在高低电平之间波动,这会导致延迟输出转换过程,并超过所规定的时钟到输出的延迟值(tco)。

2023-04-10 10:15:04 173

原创 生成块生成语句

生成的声明和生成的实例能够在设计中被有条件的调用(实例引用)。在设计中可以多次调用(实例引用)生成的实例和生成的变量声明。当对矢量中的多个位进行重复操作时,或者当进行多个模块的实例引用的重复操作时 或者在根据参数的定义来确定程序中是否应该包括某段verilog代码的时候,使用生成语句能够大大简化程序的编写过程。(2)integer(整型数)、real(实型数)、time(时间型)、realtime(实数时间型)(1)net(线网)、reg(寄存器)(3)event(事件)

2023-04-03 10:54:54 82

原创 task和fuction

task和function说明语句分别用来定义任务和函数,利用任务和函数可以把一个很大的程序模块分解成许多较小的任务和函数便于理解和调试。输入、输出和总线信号的值可以传入、传出任务和函数。任务和函数往往还是大的程序模块中在不同地点多次用到的相同的程序段。任务却能支持多种目的,能计算多个结果值,这些结果值只能通过被调用的任务的输出或总线端口送出。veriloghdl模块使用函数时是把它当做表达式的操作符,这个操作的结果就是这个函数的返回值。(2)函数不能启动任务,而任务可以启动其他任务和函数。

2023-04-02 11:21:49 61

原创 固态硬盘SSD

固态硬盘为半导体存储介质以及控制单元构成来存储数据的装置。与机械硬盘相比,固态硬盘不再使用旋转或移动的读写头来进行数据的存储,因此随机访问速度比普通硬盘要快。固态硬盘除了存储介质以及控制模块与机械硬盘不同以外,在其余方面保持一致。通常所说的SSD为基于flash的固态硬盘,由于其内部存储介质为flash,具有非易失性的特点。不过,由于闪存块易磨损,其寿命不高,一般个人用户较多使用。固态硬盘依据存储介质分为两类,一类是基于flash的固态硬盘,另一类是基于RAM的固态硬盘。

2023-03-30 15:52:35 148

原创 什么是阻塞赋值

阻塞赋值是一种同步机制,在多线程或并发编程中使用。当一个线程尝试执行阻塞赋值时,如果该赋值操作会导致其阻塞等待其他线程或进程的结果,那么该线程将被阻塞,直到被操作完成或超时。如果线程A在执行y = get_data_from_database()时被阻塞,因为该操作需要等待线程B将数据写入数据库中,那么线程A将一直被阻塞,直到线程B执行完毕。阻塞赋值可以避免并发编程中的竞态条件和死锁问题,但是它也可能导致性能问题和代码复杂性增加。因此,在使用阻塞赋值时需要谨慎考虑。

2023-03-28 10:10:25 372

原创 论文创新点怎么写

综上所述,创新点的写作需要从研究领域和研究问题出发,结合文献调研和实际需求,提出新的研究思路和解决方案,并在论文中进行详细说明和解释。提出新的研究思路:基于已有的研究成果和研究方法,提出新的研究思路或者采用新的研究方法,以达到超越已有研究成果的目的。查阅文献:在确定研究领域和研究问题后,需要查阅相关文献,了解已有的研究成果和研究方法,并分析其存在的不足。确定研究领域和研究问题:创新点应该与研究领域和研究问题紧密相关,因此首先需要明确研究领域和研究问题。

2023-03-28 09:38:08 1958

原创 verilog中的case

在数字电路设计中,case是一种语句或结构,用于根据输入变量的值执行不同的操作或操作序列。它通常用于逻辑控制,例如根据输入选择一个数据通路或执行不同的计算。case通常用于硬件描述语言(HDL)中,如Verilog和VHDL。它是一种结构化的设计方法,可以使代码更易于阅读和理解,同时也提高了设计的可维护性和可扩展性。

2023-03-25 13:04:25 327

原创 BAR空间

在PCI Agent设备进行数据传送之前,系统软件需要初始化PCI Agent设备的BAR0~5寄存器和PCI桥的Base、Limit寄存器。系统软件使用DFS算法对PCI总线进行遍历时,完成这些寄存器的初始化,即分配这些设备在PCI总线域的地址空间。值得注意的是,PCI Agent设备的BAR0~5寄存器和PCI桥的Base寄存器保存的地址都是PCI总线地址。而这些地址在处理器系统的存储器域中具有映像,如果一个PCI设备的BAR空间在存储器域中没有映像,处理器将不能访问该PCI设备的BAR空间。

2023-03-24 16:31:21 155

原创 memory型变量

对于reg型数据,其赋值语句的作用就如同改变一组触发器的存储单元的值。这些控制构造可用来描述硬件触发器的各种具体情况,如触发条件时用时钟的上升沿,或用来描述判断逻辑的细节,如各种多路选择器。在这里,reg[n-1:0]定义了存储器中每一个存储单元的大小,即该存储单元是一个n位的寄存器;存储器名后的[m-1:0]则定义了该存储器中有多少个这样的寄存器;这个例子定义了一个名为mema的存储器,该存储器有256个8位的存储器。该存储器的地址范围是0到255。reg[n-1:0] 存储器名[m-1:0];

2023-03-24 15:00:57 318

原创 DMA是什么

首先需要设置DMA控制器的地址和计数器,然后设备控制器会向DMA控制器发送请求,请求进行数据传输。使用DMA技术,设备可以直接访问内存而不需要经过CPU的干预,从而提高数据传输速度,减轻CPU的负担。通常情况下,当计算机系统需要传输数据时,需要CPU从设备读取数据,然后再将数据写入内存。而使用DMA技术后,设备可以直接访问内存,而不需要CPU参与数据传输的每一个步骤,从而提高了数据传输的效率。因此,在使用DMA技术时,需要仔细配置和管理相关的硬件设备,以确保系统的稳定性和数据的安全性。

2023-03-24 13:25:52 2855

原创 verilog设计

在现代设计方法中,通常用诸如verilog这样的硬件描述语言来进行描述,与诸如自底向上的手动输入等其他方式相比,采用前者编写一个大型电路的verilog行为描述文件并实现其门级电路综合所花费的时间要少的多,节省下来的时间可用于设计流程的其他部分。行为描述方法总结抽象了电路的复杂功能,并隐藏了许多门级的底层细节,因此在功能设计中对出现的问题进行隔离处理,用较少的信息量来实现并简化设计。此外,如果行为描述在功能上是正确的,它就会成为后续的门级电路实现时有价值的设计规范。

2023-03-22 15:59:30 142

原创 wire型数据和reg型数据

寄存器是数据存储单元的抽象,寄存器数据类型的关键字是reg。通过赋值语句可以改变寄存器存储的值,其作用与改变触发器存储的值相当。wire型信号可以用做任何方程式的输入,也可以用做assign语句或实例元件的输出。wire型信号的格式和reg信号的格式很相似。reg型数据常用来表示always模块内的指定信号,常代表触发器。wire[n-1:0]数据名1,数据名2,…//定义了一个4位的名为regb的reg型数据。//定义了一个8位的wire型数据。reg[n-1:0]数据名1,数据名2,…

2023-03-22 09:56:31 879

原创 verilog并发执行和顺序执行

如果用verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。上面三个例子分别采用了assign语句,实例元件和always块。这三个例子描述的逻辑功能是同时执行的。也就是说,如果把三项写到一个verilog模块文件中去,它们的顺序不会影响实现的功能。这三项是同时执行的,也就是并发的。然而,在always模块内,逻辑是按照指定的顺序执行的。always块中的语句称为顺序语句,因为它们是顺序执行的。所以always块也称为过程块。

2023-03-22 09:30:32 2123

原创 wire变量

网络类型的变量不能储存值,而且它必须受到驱动器(例如门或连续赋值语句assign)的驱动。如果没有驱动器连接到网络类型的变量上,则该变量就是高阻的,即其值为z。常用的网络数据类型包括wire型和tri型。这两种变量都是用于连接器件单元,它们相同的语法格式和功能。wire型变量通常是用来表示单个门驱动或连续赋值语句驱动的网络型数据,tri型变量则用来表示多驱动器驱动的网络型数据。变量是一种在程序运行过程中其值可以改变的量,在VerilogHDL中变量的数据类型有很多,这里对几种进行介绍。

2023-03-20 17:36:52 471

原创 基本寄存器

四个数码输入端D4,D3,D2,D1,一个清除端,一个接受控制端,四个输出端Q4,Q3,Q2,Q1。由D触发器的特性方程Qn+1=D,可知,当接收脉冲到来后,触发器的状态更新为Q4Q3Q2Q1=D4D3D2D1,即把数码接收进寄存器,并保持。一个触发器可以存放一位二进制代码,存放n位二进制代码可用n个触发器实现。有四个数码输入端和四个输出端,而接收控制端就是D触发器的时钟脉冲端,即CP端。正脉冲接收:用一个正脉冲将门1-4打开,将输入数码放进寄存器中,使Q4,Q3,Q2,Q1=D4,D3,D2,D1。

2023-03-19 11:00:27 580

原创 时序电路的特点

第二,时序电路的输入与输出之间至少有一个反馈路径,即组合电路至少有一个输出做存贮电路的输入,存贮电路的状态至少有个作为组合电路的输入并与其他输入信号一起共同决定整个电路的输出。在组合电路中,任何时刻的稳定输出仅与该时刻的输入有关,而与先前的输入无关,就是说,组合电路执行的是一种实时控制,输入信号发生变化,输出信号也随之变化,输出信号总是输入信号的单值函数。因此,组合电路没有记忆功能,信号单向传输,不存在任何反馈支路。在时序电路中,任何时刻的稳定输出不仅与该时刻的输入有关,而且还与电路的原来状态有关。

2023-03-19 10:23:53 1951

原创 理解verilog

以上4点与C语言有很大的不同。许多与C语言类似的语句只能出现在过程块中,而不能随意出现在模块功能定义的范围内。在verilog模块中所有过程块(如initial块,always块)、连续赋值语句、实例引用都是并行的。只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于模块的功能定义部分。verilog的初学者一定要深入理解并记住。他们表示的是一种通过变量名互相连接的关系。在同一模块中这三者出现的先后秩序没有关系。

2023-03-16 15:13:43 102

原创 modelsim仿真二选一多路选择器testbench

module t;reg clock;wire outw;initialbeginain=0;bin=0;select=0;clock=0;endbeginendselect;endmodule。

2023-03-15 15:14:38 646

原创 带有与非门的二选一多路选择器Verilog程序

output out;endmodule。

2023-03-14 09:40:17 528

原创 二选一多路选择器Verilog程序

output out;reg out;if(!sl) out=a;else out=b;endmodule。

2023-03-14 09:26:32 733

原创 指针与存储

我们的系统中,地址按字节编址,short类型占用2字节,double类型占用8字节。在C中,指针加1指的是增加一个存储单元。对数组而言,这意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址。这就是为什么必须声明指针所指向对象类型的原因之一。只知道地址不够,因为计算机要知道存储对象需要多少字节。

2023-03-13 14:02:41 62

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除