组合逻辑过程块

组合逻辑过程块

always_comb代表组合逻辑
always_comb过程块表示建立组合逻辑模型

always_comb
if(!mode)y = a + b;
elsey = a - b;

always_comb能推断出其敏感表
与通用always过程块不同,always_comb块的后面不需要指明敏感表。软件工具已经知道设计的意图是建立一个组合逻辑模型,因此这个组合逻辑的敏感表可以是自动推断出来的。推断的敏感表包含了所有被过程块读取(所谓读取即信号出现在表达式右边或作为条件语句的条件表达式中,下同)并在块外赋值的信号。那些在此过程中被阻塞赋值语句赋值并且只在该过程块读取的临时变量不包括在敏感表中。SystemVerilog的敏感表中还包括过程中调用函数的所有信号,但只被函数赋值和读取的临时变量除外。

禁止出现共享变量

always_comb过程块仍然要求被赋值的变量不能再次在其他过程被赋值。这样限制避免了非组合逻辑的共享变量的出现。这种限制也符合综合的指导原则,并且确保了所有的软件工具(不仅仅是综合工具)都采用同样的建模规则。
无歧义的设计意图
零时刻自动求值
always_comb确保输出与输入值保持时间一致
always_comb过程块与always过程块的另一个不同之处在于,在所有initial和always过程块启动后,always_comb块会在仿真的零时刻自动出发。不管推断出的敏感表中的信号是否发生了变化,这样的自动求值都会发生。always_comb的这种特殊的语义确保了组合逻辑在零时刻产生与输入相对应的输出结果。特别是在使用缺省值为逻辑0的两态变量建模时,这种零时刻的自动求值显得尤为重要,复位信号很可能不会引起组合逻辑的敏感表中的信号发生变化。而如果没有变化,通用always过程块不会被触发,从而使输出变量也不会变化。

一个采用枚举类型建模的简单有限状态机。
三个可能的状态是WAITE、LOAD、STORE
。状态机复位后处于WAITE状态。状态机的
组合逻辑会对当前状态进行解码,如果当前
状态的组合逻辑为WAITE,则下一个状态为LOAD。
在每个clock信号的上升沿,状态时序逻辑都会将
变量NextState的值赋给变量Statemodule controller(output logic read,write,input instr_t instruction,input logic clock,resetN
);
enum {WAITE,LOAD,STORE}State,NextState;
always@(posedge clock,negedge resetN)if(!resetN) State <= WAITE;else State <= NextState;always@(State)
begincase(State)WAITE:NextState = LOAD;LOAD:NextState = STORE;STORE:NextState = WAITE;encase
endalways@(State,instruction)
beginread = 0; write = 0;if(State == LOAD && instruction == FETCH) read = 1;else if(State ==STORE && instruction == WRITE) write = 1;
end
endmoudle
module controller(output logic read,write,input instr_t instruction,input logic clock,resetN
);
enum {WAITE,LOAD,STORE}State,NextState;
always@(posedge clock,negedge resetN)if(!resetN) State <= WAITE;else State <= NextState;always_comb
begincase(State)WAITE:NextState = LOAD;LOAD:NextState = STORE;STORE:NextState = WAITE;encase
endalways_comb
beginread = 0; write = 0;if(State == LOAD && instruction == FETCH) read = 1;else if(State ==STORE && instruction == WRITE) write = 1;
end
endmoudle

always_comb敏感列表包含函数读取的信号
SystemVerilog中的always_comb过程块则消除了@*的这点缺陷。always_comb过程块内读取的信号和块内调用的函数的信号都敏感。这样编写函数时就不需要形式参数了。在设计过程中,即使函数引用的信号的发生变化,也不需要修改函数形式参数列表和调用函数的代码。

always_comb过程块会对data、sel、c、d和e敏感
always@* //推断出@(data)
begina1 = data << 1;b1 = decode();...
endalways_comb //推断出@(data,sel,c,d,e)
begina2 = data << 1;b2 = decode();...
endfunciton decode;//不带输入的函数
begincase(sel)2'b01: decode = d|e;2'b10:decode = d&e;default : decode = c;endcase
end
endfunction

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外行看Flash的存储原理

突然在网上看到别人两年前写的一篇关于nor和nand的好文章&#xff0c;做为csdn的合法公民&#xff0c;有必要转 一、存储数据的原理 两种闪存都是用三端器件作为存储单元&#xff0c;分别为源极、漏极和栅极&#xff0c;与场效应管的工作原理相同&#xff0c;主要是利用电场的…

数码印刷

数码印刷 目前&#xff0c;RIP已经变成了印前生产的核心问题。它影响到从色彩和文件管理到印刷的整个生产过程的方方面面。而且&#xff0c;像陷印和拼大版这些以前需要单独的应用程序处理的功能&#xff0c;现在也被加到了RIP中。    新的RIP产品和销售商有很多。象Agfa,Ha…

锁存逻辑过程块

锁存逻辑过程块 always_latch描述锁存逻辑 always_latch过程块表示过程块描述的是基于锁存器的逻辑。和always_comb一样&#xff0c;always_latch的敏感表示推断出来的。 always_latchif(enable) q < d;always_latch与always_comb语义相同 always_latch过程的语义规则与al…

一种User Mode下访问物理内存及Kernel Space的简单实现

一种User Mode下访问物理内存及Kernel Space的实现 一&#xff0e;背景 WinCE发展到6.0之后&#xff0c;内存结构和管理方法进行了完善。对应用程序影响比较大的有Virtual Memory Layout的变化&#xff0c;如每个进程的虚拟内存空间扩展为2GB。对驱动程序影响比较大的有Pointe…

什么是ICC曲线

什么是ICC曲线 很多人都问及ICC曲线&#xff0c;但又都很不了解&#xff0c;甚至有些人认为有了ICC曲线就能打印出很漂亮的图片&#xff0c;其实不然&#xff0c;下面就我所掌握的知识给大家做个通俗的理解.国际色彩协会The international Color Consortium简称ICC&#xff0c;…

时序逻辑过程块

时序逻辑过程块 always_ff描述时序逻辑 always_ff专用过程块表示设计的意图是描述可综合的时序逻辑。 always_ff&#xff08;posedge clock,negedge resetN&#xff09;if(!resetN) q <0;else q < d;always_ff过程块的敏感表必须明确列出。这样就可以根据敏感表的内容&…

快速计算整数的二进制表示法中1的个数

快速计算整数的二进制表示法中1的个数 题目&#xff1a;给定一个无符号32位整数x&#xff0c;求x的二进制表示法中含1的个数&#xff1f; 第一种算法&#xff1a; int OneCount(unsigned int x){ for(int count0; x>0; count) x&x-1;//把最后面的1变0 return …

对任务和函数的改进

对任务和函数的改进 1、任务和函数的隐式语句组 SystemVerilog会推断出begin…end SystemVerilog简化了任务和函数的定义&#xff0c;有多条语句时不在需要begin …end对多条语句进行打包。打包省略之后&#xff0c;任务或函数中的语句将会顺序执行&#xff0c;就像仍然在begi…

RAPI简单说明及Sample Code

RAPI简单说明及Sample Code 一&#xff0e;什么是RAPI RAPI用来通过ActiveSync来建立PC与Device的通信。通过RAPI可以实现PC 对Device的控制和同步。 二&#xff0e;使用说明 常用的RAPI包括File I/O的一些操作&#xff0c;以及获取系统信息的一些API。 在使用RAPI来建立PC与…

在C/C++代码中使用SSE等指令集的指令(1)介绍

http://blog.csdn.net/gengshenghong/article/details/7007100我们知道&#xff0c;在C/C代码中&#xff0c;可以插入汇编代码提高性能。现在的指令集有了很多的高级指令&#xff0c;如果我们希望使用这些高级指令来实现一些高效的算法&#xff0c;就可以在代码中嵌入汇编&…

递增和递减操作符

递增和递减操作符 和- -操作符 for(i 0;i < 31; i) begin... end先加与后加 通常原则是&#xff0c;对组合逻辑使用阻塞赋值&#xff0c;而对时序逻辑赋值使用非阻塞赋值。 注意&#xff1a;和--操作符是阻塞赋值i;//使用阻塞赋值对i进行递增 ii1;//使用阻塞赋值对i进行…

User Mode Driver Management介绍(一)

User Mode Driver介绍 Windows CE 6.0中引入了User Mode Driver的概念&#xff0c;可是无论是网上&#xff0c;还是各个芯片厂商提供的方案中&#xff0c;都很少提及这方面的内容。 本文以小郭对存储管理和User Mode Driver Host的理解为基础&#xff0c;结合具体的代码实现&am…

CString内存泄露

经常见到 unicode 设置不一致造成内存泄露。。。

赋值操作符

赋值操作符 和其他赋值操作符 out in;//将out和in相加并将结果赋值给out //out out in;注意&#xff1a;这些操作符都是阻塞赋值packdage definitions;typedef enum logic[2:0] {ADD,SUB,MULT,DIV,SL.SR} opcode_t;typedef enum logic{UNSIGNED,SIGNED}operand_type_t;typ…

SolidGraph CAD System

http://www.codeproject.com/Articles/15554/SolidGraph-CAD-System

User Mode Driver Management 介绍(二)

&#xff08;接上一篇&#xff09; 3> 调用User Mode Driver Host API来将Driver Load到内存 CeFsIoControl()实际上是一个对文件系统驱动FSD进行操作的函数&#xff0c;需要传入文件夹名字和IoControlCode。 帮助文档中对该函数的解释如下&#xff1a; This function send…

有无关通配符的相等操作符

有无关通配符的相等操作符 逻辑相等操作符 条件相等操作 SystemVerilog通配符相等操作符允许屏蔽某些位 SystemVerilog还增加了两个新的比较操作符&#xff1a; &#xff1f; 和&#xff01;&#xff1f;。这两个操作符允许在比较中屏蔽无关位。 操作符 &#xff1f;&#x…

cab文件介绍及制作方法

转自&#xff1a;http://bbs.pcpop.com/091030/5945399.html 1. 什么是cab文件 CAB在电脑上是一种压缩文件&#xff0c;微软出品的东西&#xff0c;用WinRAR可以解压缩&#xff0c;在DOS启动盘里面可以看见一些CAB压缩文件。其实Windows里面已经带了CAB压缩程序&#xff0c;但…

设置成员操作符--inside

设置成员操作符–inside SystemVerilog增加了一个检测是否集合中–员的操作符&#xff0c;这个操作符的关键字是inside。 logic [2:0] a; if(a inside{3b001,3b010,3b100}) //等价if((a3b001)||(a3b010)||(a3b100)) ...使用inside操作符可以方便的比较一个数值和多个可能值之…

CVE-2015-0235: GHOST – A Critical Vulnerability in the Glibc Library

GHOST is a ‘buffer overflow’ bug affecting the gethostbyname() and gethostbyname2() function calls in the glibc library. If a remote attacker can make an application call to gethostbyname() or gethostbyname2(), this vulnerability allows the remote attack…