首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的云盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的音乐
我的影视
我的邮件
Search
1
科普:Memory Compiler生成的Register file和SRAM有何区别?
89 阅读
2
在IC617中进行xa+vcs数模混仿
88 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
87 阅读
4
vcs debug rtl或者netlist 中的loop
53 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
42 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vcs
PyQT
STM32
cadence
linux
systemverilog
EDA
Alist
vscode
uos
package
MCU
C
QT
CXL
sed
sv
webdav
bennyhe
累计撰写
344
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的云盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的音乐
我的影视
我的邮件
搜索到
344
篇与
的结果
2025-07-14
verilog的可综合设计(2) (2008-07-01 22:08:08)
先记下来:1、不使用初始化语句;2、不使用延时语句;3、不使用循环次数不确定的语句,如:forever,while等;4、尽量采用同步方式设计电路;5、尽量采用行为语句完成设计;6、always过程块描述组合逻辑,应在敏感信号表中列出所有的输入信号;7、所有的内部寄存器都应该可以被复位;8、用户自定义原件(UDP元件)是不能被综合的。一:基本Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器,还有可能被优化掉。二:verilog语句结构到门级的映射1、连续性赋值:assign连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因此连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign语句中的延时综合时都将忽视。2、过程性赋值:过程性赋值只出现在always语句中。阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。过程性赋值的赋值对象有可能综合成wire, latch,和flip-flop,取决于具体状况。如,时钟控制下的非阻塞赋值综合成flip-flop。过程性赋值语句中的任何延时在综合时都将忽略。建议同一个变量单一地使用阻塞或者非阻塞赋值。3、逻辑操作符:逻辑操作符对应于硬件中已有的逻辑门,一些操作符不能被综合:===、!==。4、算术操作符:Verilog中将reg视为无符号数,而integer视为有符号数。因此,进行有符号操作时使用integer,使用无符号操作时使用reg。5、进位:通常会将进行运算操作的结果比原操作数扩展一位,用来存放进位或者借位。如:Wire [3:0] A,B;Wire [4:0] C;Assign C=A+B;C的最高位用来存放进位。6、关系运算符:关系运算符:<,>,<=,>=和算术操作符一样,可以进行有符号和无符号运算,取决于数据类型是reg,net还是integer。7、相等运算符:==,!=注意:===和!==是不可综合的。可以进行有符号或无符号操作,取决于数据类型8、移位运算符:左移,右移,右边操作数可以是常数或者是变量,二者综合出来的结果不同。9、部分选择:部分选择索引必须是常量。10、BIT选择:BIT选择中的索引可以用变量,这样将综合成多路(复用)器。11、敏感表:Always过程中,所有被读取的数据,即等号右边的变量都要应放在敏感表中,不然,综合时不能正确地映射到所用的门。12、IF:如果变量没有在IF语句的每个分支中进行赋值,将会产生latch。如果IF语句中产生了latch,则IF的条件中最好不要用到算术操作。Case语句类似。Case的条款可以是变量。如果一个变量在同一个IF条件分支中先赎值然后读取,则不会产生latch。如果先读取,后赎值,则会产生latch。13、循环:只有for-loop语句是可以综合的。14、设计时序电路时,建议变量在always语句中赋值,而在该always语句外使用,使综合时能准确地匹配。建议不要使用局部变量。15、不能在多个always块中对同一个变量赎值16、函数函数代表一个组合逻辑,所有内部定义的变量都是临时的,这些变量综合后为wire。17、任务:任务可能是组合逻辑或者时序逻辑,取决于何种情况下调用任务。18、Z:Z会综合成一个三态门,必须在条件语句中赋值19、参数化设计:优点:参数可重载,不需要多次定义模块四:模块优化1、资源共享:当进程涉及到共用ALU时,要考虑资源分配问题。可以共享的操作符主要有:关系操作符、加减乘除操作符。通常乘和加不共用ALU,乘除通常在其内部共用。2、共用表达式:如:C=A+B; D=G+(A+B);两者虽然有共用的A+B,但是有些综合工具不能识别.可以将第二句改为:D=G+C;这样只需两个加法器.3、转移代码:如循环语句中没有发生变化的语句移出循环.4、避免latch:两种方法:1、在每一个IF分支中对变量赋值。2、在每一个IF语句中都对变量赋初值。5:模块:综合生成的存储器如ROM或RAM不是一种好方法,只是成堆的寄存器,很费资源。最好用库自带的存储器模块。五、验证:1、敏感表:在always语句中,如果敏感表不含时钟,最好将所有的被读取的信号都放在敏感表中。2、异步复位:建议不要在异步时对变量读取,即异步复位时,对信号赋以常数值。摘自:http://blog.21ic.com/user1/1425/archives/2008/48618.html
2025年07月14日
1 阅读
0 评论
0 点赞
2025-07-14
verilog的可综合设计(1) (2008-07-01 22:07:02)
Averilog的流行,有两方面的原因;B verilog与VHDL相比的优点C典型的verilog模块D verilog语法要点A) verilog的流行,有两方面的原因:1它是cadence的模拟器verilog-XL的基础,cadence的广泛流行使得verilog在90年代深入人心;2它在硅谷获得广泛使用;B) verilog与VHDL相比的优点二者的关系仿佛C与FORTRAN,具体而言:1 verilog的代码效率更高: 比较明显的对比:VHDL在描述一个实体时采用entity/architecture模式,verilog在描述一个实体时只需用一个"module/edumodule"语句块.此外verilog的高效性还在很多地方体现出来;2 verilog支持二进制的加减运算:VHDL在进行二进制的加减运算时使用conv_*函数或者进行其他的定义,总之必须通知编译器;verilog直接用形如"c=a+b"的表示二进制的加减运算;3综合时可控制性好:VHDL对信号不加区分地定义为"signal",而verilog区分为register类型的和wire类型的;但是也有人支持VHDL,认为verilog和VHDL的关系仿佛C和C++.C)典型的verilog模块讨论以下典型电路的verilog描述:*与非门;*加法器; //即全加器D触发器;计数器; //*分频的counterlatch;*时序机;*RAM; //用synopsys的*模块引用;*预编译;*与非门的verilog描述如下://verilog使用和C语言相同的注释方法module nd02(a1,a2,zn);//一个verilog模块总是以module开始,以endmodule 结束,nd02是模块名,a1,a2,zn是模块的3个输入输出信号input a1,a2; //告诉编译器a1,a2对此模块而言是输入,并且数据类型是"bit"output zn; //告诉编译器zn对此模块而言是输出,数据类型也是"bit"nand (zn,a1,a2); //我理解nand是运算符,我们不必深究verilog中的正式术语是什么了吧,总之这种形式表示zn=~(a1 && a2);你一定已经想到类似的运算符还有"not","and","or","nor","xor"了吧;除了"not",括号里的信号数可以任意,例如or (z,f,g,h)表示z=f || g || h,并且延时是3个单位时间,#x表示延时x个单位时间;endmodule*加法器的verilog描述如下:module ad03d1(A,B,CI,S,CO) ;input [2:0] A,B; //表示A,B是输入信号,并且是3位矢量,上界是2,下界是0input CI;output [2:0] S;output CO;assign {CO,S}=A+B+CI;//一对"{"和"}"表示链接,即将CO和S合并成4位矢量endmodule*带异步清零端的D触发器的verilog描述如下:module dfctnb (d,cp,cdn,q,qn);input d,cp,cdn;output q,qn;reg q,qn; //关键字"reg"表示q和qn是"register"类型的信号;verilog中有两种类型的信号:"register"类型和"wire"类型.你可以简单地把register类型的信号想象为某个D触发器的输出,而wire类型的的信号是组合逻辑的输出.二者的最大区别在于:你可以对register类型的信号进行定时赋值(用wait语句在特定时刻的赋值,详见下面always语句),而对于wire类型的信号则不可.always wait (cdn==0) //表示每当cdn=0时,将要对D触发器清零,"always"和"wait"嵌套,"wait"和"@"是verilog的两个关键字,表示一旦有某事发生;则执行下面的语句块,"always"有点象C语言中的"if ... then...","wait"和"@"的区别:请参考本模块.wait表示本语句块的进程停止,直到"cdn=0"的条件出现才继续;我理解在verilog中,每个最外层语句块都是一个*的进程;"@"(请看下个always语句)也表示本语句块的进程停止,直到后面定义"posedge cp"(即出现cp的上升沿)的事件出现才继续;也许wait和@可以合二为一吧,但至少到目前verilog中wait表示"条件",@表示"事件";具体运用中,wait总是用于类似"wait(xxx=1)"之类的场合,@总是用于类似"@(xxx)"或"@(posedge/negedge xxx)"之类的场合整句话的意思是"每当cdn等于0时,则作以下事情"begin //begin...end结构的用法类似于pascal语言 q=0; qn=1; wait (cdn==1);endalways @ (posedge cp)//"@(posedge cp)"中有两个关键字:"@ (x)"表示"每当事件x发生","posedge x"表示"x的上升沿,"negedge x"表示"x的下降沿",整句话的意思是"每当cp的上升沿,则作以下事情" if (cdn) //如果cdn=1(意味着清零端无效) begin q=d; qn=~q;//"~"表示反相 endendmodule*计数器的verilog描述如下:module count(in,set,cp,out) ;//此计数器,在cp的上升沿将输入赋给输出,在cp的上升沿使输出加一input [15:0] in;input set,cp;output [15:0] out;reg [15:0] out;always @ (posedge set) out = in;always @(posedge cp) out = out+1; //verilog容许一个信号同时出现在等号两端,只要它是reg类型的endmodule*latch的描述如下:always @(clk or d)if (clk) q = d; *时序机的verilog描述如下:always @(posedge CLK) //D是下一个状态,Q是当前状态,e1,e2是输入,a,b是输出Q=D;always @(Q or othercase) begin //当Q变化或输入e1,e2变化时D要相应变化D = Q; //note1a = 0;b = 0;......case(Q) q1:begin q1 action; if(e1)D=d1; if(e2)D=d2; else D=d3; a = 1; //note 2 end q2:begin b = 1; ...... end default:begin a = 0; b = 0; ......endend---annotations---note 1: This is a custom expression,after reset,D should be equal to Q;note 2: In this state machine,a is only equal to 1 at state q1,in other state,a is equal to 0;RAM的verilog描述如下:module ram(din,ain,dout,aout,rd,wr);//这是一个双口RAM,分别有:输入端:输入地址ain;输入数据din;上升沿有效的写信号wr;/输出端:输出地址aout;输出数据dout;高电平有效的读信号rd;inout [7:0] din;input [7:0] ain,aout;input rd,wr;output [7:0] dout;reg [7:0] memory [0:255]; //请注意这是存储阵列的描述方法,描述了一个共有256个字的存储阵列,每个字是8位assign dout = rd ? memory[aout] : 8'bz; //"assign"关键字表示并行赋值语句的开始"?"运算符的作用和在C语言中一样"8'bz"是一个常量,表示一个字节的高阻态,其中8表示长度是8bit,"'"是固定分割符,"b"表示后面的数据是以比特形式给出的,"z"表示高阻;举例:4'ha表示长4bit的数"1010"。类似的还可举出5'b10111,6'o33等等always @(posedge wr)memory[ain] = din;endmodule*模块引用假设在前面(可以是别的模块)定义了module ram(din,ain,dout,aout,rd,wr),则引用此模块时只需写ram myram(din_in_map,ain_in_map,dout_in_map,aout_in_map,rd_in_map,wr_in_map);//其中"ram"是所引用的module名,"myram"是你起的instance名,"din_in_map"等等是图中的节点名,和器件(module)中的"din..."进行"虚实结合";*预编译类似C语言,只需写include "<pathname:filename>",反上撇号""是verilog的预编译符,类似C中的"#".D) verilog语法要点*基本原则设计时应该把你的系统划分为计数器,触发器,时序机,组合逻辑等等可综合的单元,对此不同的IC公司和EDA开发商可能根据自己的见解和经验提出不同的要求,并且对verilog程序的细节进行自己的规定,但有一点是对的:即写硬件描述语言不象写C语言那样符合语法就行.单单符合verilog语法的程序可能被拒绝综合,甚至被拒绝模拟;*最外层可以写什么?这里所说的最外层是指module语句后的第一层,在这一层可以写这些可执行语句:assign和nand等定义组合逻辑的语句,always语句,模块引用语句,一些以"$"开头的系统定义语句.特别注意不可以写if语句.if语句只能放在always内部.不推荐写wait语句,因为不能综合.*不可以在多个always语句中对一个信号赋值.
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
VC++ Error spawning cl.exe 解决办法 (2008-06-27 17:23:04)
问题可以按照以下方法解决:打开vc界面 点击VC“TOOLS(工具)”—>“Option(选择)”—>“Directories(目录)”重新设置“Excutable Fils、Include Files、Library Files、Source Files”的路径。很多情况可能就一个盘符的不同(例如你的VC装在C,但是这些路径全部在D),改过来就OK了。如果你是按照初始路径安装vc6.0的,路径应为:executatble files:C:\Program Files\Microsoft Visual Studio\Common\MSDev98\BinC:\Program Files\Microsoft Visual Studio\VC98\BINC:\Program Files\Microsoft Visual Studio\Common\TOOLSC:\Program Files\Microsoft Visual Studio\Common\TOOLS\WINNTinclude files:C:\Program Files\Microsoft Visual Studio\VC98\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDElibrary files:C:\Program Files\Microsoft Visual Studio\VC98\LIBC:\Program Files\Microsoft Visual Studio\VC98\MFC\LIBsource files:C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRCC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC如果你装在其他盘里,则仿照其路径变通就行(我就是装在D盘)。关键是microsoft visual studio\ 后面的东西要相同。本人深受其害,重装多次不管用,上面中文部分为高手借鉴,下面路径为本人深思所得,终于解决。与君分享。
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
如何删除系统服务 (2008-06-22 12:41:08)
删除的办法有两个:办法一: 用sc.exe这个Windows命令 开始——运行——cmd.exe,然后输入sc就可以看到了。使用办法很简单: sc delete "服务名" (如果服务名中间有空格,就需要前后加引号) 如针对上面的: sc delete KSD2Service 方法二:直接进行注册表编辑 打开注册表编辑器,找到下面的键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 一般服务会以相同的名字在这里显示一个主健,直接删除相关的键值便可。 三、特殊情况 1、如果服务显示的是rundll32.exe,并且这个文件是位于system32目录下,那么就不能删除这个rundll32.exe文件,它是Windows系统的文件。这时只要清除相关的服务就可以了 2、如果一个服务删除了马上又自动建立了,说明后台有进程在监视、保护。需要先在进程管理器中杀掉相应的进程,或者启动后按F8,到安全模式下删除。 摘自:百度空间
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
大容量U盘启动制作工具 此博文包含图片 (2008-06-22 10:44:24)
此软件由Max亲自测试,由于此程序制作的启动程序比USBBOOT的稳定性及兼容性都要高,并且在我测试的机器中引导出来的USBZIP模式都可以成功的识别为A盘,最值的一提的是该程序支持超过2G的大U盘制作为USBZIP模式,为了测试此软件,我还特意花了400大洋买了个2G的大U盘来测试,不过还是值的该U盘的读写速度在20M/秒,这是其它的U盘无法具备的。盘版制作教程,注意:操作前请备份好U盘的资料。首先下载上面的Flashboot将U盘跟据下面的教程制作打开软件的界面,点击下一步继续。图1http://pzz.cn/bbs/attachment/Mon_0701/8_2_85771b362a5cc4f.jpg选择您要通过哪媒体创建U盘启动,由于我们制作的是DOS启动,所以我们选择“创建带迷你DOS系统的可启动闪存盘。图2http://pzz.cn/bbs/attachment/Mon_0701/8_2_cf105f94fb13164.jpg请选择您的启动文件来源,如果没有,可以选择“任何基于DOS的软盘或软盘镜像” 图3http://pzz.cn/bbs/attachment/Mon_0701/8_2_03bd1fe18e8727e.jpg然后在下图中选择你的DOS启动盘的软盘镜像,如果您没有,可以选择FLASHBOOT安装目录中的由我们集成的DOS98.IMG镜像,此镜像已包含MSDOS 7.1的启动文件。图4http://pzz.cn/bbs/attachment/Mon_0701/8_2_55be5a687dacd6d.jpg然后在下图中选择您的U盘的盘符,如果未找到,请点击“刷新列表”图5http://pzz.cn/bbs/attachment/Mon_0701/8_2_2b5bd689724658a.jpg在这一步选择U盘的启动模式,大家的都USB-ZIP的启动模式相对来说兼容性,及稳定性都相对要好,而且启动后就直接是A盘符,这样大大的方便了我们制作DOS启动。所以这里我们建议您选择USB-ZIP模式,如果您要保留U盘的资料请先选中启动模式如:USB-ZIP,然后再选择“保留磁盘数据”这样可以不格式化U盘而直接制作引导了。图6http://pzz.cn/bbs/attachment/Mon_0701/8_2_20417bbfa8ece5c.jpg点击“完成”待程序写入完文件后,即可关闭该程序,这样您的U盘已经具备启动功能了。图7http://pzz.cn/bbs/attachment/Mon_0701/8_2_043a8d158dd1183.jpgMaxDOS v5.8s U盘版发布,全面解决大U盘制作问题。U盘启动制作工具Flashboot。
2025年07月14日
0 阅读
0 评论
0 点赞
1
...
28
29
30
...
69