博文

cpld的入门交流之一:GAL编程(2005-06-21 20:11:00)

摘要:最近有时间学学CPLD,很惭愧没能学好学透,但对于我预先想做的工作课题已经可以对付了。不求锦上添花,但求能解决实际问题。     我认为学习CPLD首先有必要了解一下GAL的编程,虽然他们的语言可能不同,但是基本的程序思路、结构、需要表达的方法有很多类似的 地方,马马虎虎地说:N个GAL加在一起就是CPLD,严格说是不对的,但是对于没有入门之前可以简单的这样理解。所以粗略地了解一下GAL的 编程对学习CPLD有很大帮助。我希望我能够讲清楚学习掌握一些基本编程,通过学习能够掌握手头的简单应用方法,而进一步的深入研究就 不在入门之列了,掌握的基本方法就可以按自己的想法动手试验,然后才能步步深入。     GAL编程,一般可以使用ABEL语言编程,ABEL的语法基本上是由一组逻辑表达式进行叙述,一片GAL能帮我完成什么功能呢?或者说能改 变成什么样的芯片呢?对GAL来说,由于内部的逻辑电路(门)比较少,一般只能完成一些简单的逻辑转换、简单的计数器(位数少)、锁存器 等。一般简单来讲,GAL的可用输入比输出多,如果想用他做地址译码器是比较合适的,在单片机的应用中,往往需要用几个不同的门电路组 合或加上138之类的3-8译码器组合,译出几个特定地址,这才是GAL的专长,可以在一个芯片内完成,使得你的电路简洁,而且输入输出在不 违背基本约定的前提下可以随意调换,使得布板走线容易。先看看下面的一个例子:     module M273                                         "这是一个类似于74LS273的锁存器程序     title '8-bit Locker &n......

阅读全文(11047) | 评论:2

FPGA和CPLD设计进阶(2005-06-21 20:12:00)

摘要:资料来源www.fpga.com.cn/advance.htm 撰写:    朱健军 版本:    1.0 时间:    20040308 §1   关于毛刺问题的探讨 §1.1 可靠性有关的几个概念 一  建立时间和保持时间    建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间, 如果保持时间不够,数据同样不能被打入触发器。如图1 。 数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间。 二  竞争和冒险 几乎所有关于数字电路的教材,都会提到数字电路中的竞争和冒险问题,但是这个问题往往被我们忽略。我们可以先来回顾一下关于竞争和冒险的一些基本概念。 (一)PLD内部毛刺产生的原因 我们在使用分立元件设计数字系统时,由于PCB走线时,存在分布电感和电容,所以几纳秒的毛刺将被自然滤除,而在PLD内部决无分布电感和电容,所以在PLD/FPGA设计中,竞争和冒险问题将变的较为突出。 (二)FPGA中的冒险现象 信号在FPGA器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在"冒险"。(与分立元件不同,由于PLD内部不存在寄生电容电感,这些毛刺将被完整的保留并向下一级传递,因此毛刺现象在PLD、FPGA设计中尤为突出) 图6.21......

阅读全文(9213) | 评论:1

IP地址分配(2005-06-21 20:12:00)

摘要:地址分配对应用来说更多的是如何理解为什么会这样分配给你ip地址,需要自己做ip规划的机会是很少的,除非是私有的大型的网络,真正需要考虑大规模ip规划的工程师在全国应该不会超过3位数。 1、IP地址 IP地址标识着网络中一个系统的位置。我们知道每个IP地址都是由两部分组成的:网络号和主机号。其中网络号标识一个物理的网络,同一个网络上所有主机需要同一个网络号,该号在互联网中是唯一的;而主机号确定网络中的一个工作端、服务器、路由器其它TCP/IP主机。对于同一个网络号来说,主机号是唯一的。每个TCP/IP主机由一个逻辑IP地址确定。 网络号和主机号 IP地址有两种表示形式:二进制表示(1和0太多了就搞不清)和点分十进制表示。每个IP地址的长度为4字节,由四个8位域组成,我们通常称之为八位体。八位体由句点.分开,表示为一个0-255之间的十进制数。一个IP地址的4个域分别标明了网络号和主机号。 2、地址类型 为适应不同大小的网络,internet定义了5种IP地址类型。 可以通过IP地址的前八位来确定地址的类型: 类型 IP形式 网络号 主机号 A类 w.x.y.z     w   x.y.z   w时1——126 B类 w.x.y.z     w.x   y.z   w是128——191 C类 w.x.y.z     w.x.y   z   w是192——223 我们来看一下这5类地址: A类地址:可以拥有很大数量的主机,最高位为0,紧跟的7位表示网络号,余24位表示主机号,总共允许有126个网络。 B类地址:被分配到中等规模和大规模的网络中,最高两位总被置于二进制的10,允许有16384个网络。 C类地址:被用于局域网。高三位被置为二进制的110,允许大约200万个网络。 D类地址:被用于多路广播组用户,高四位总被置为1110,余下的位用于标明客户机所属的组。 E类地址是一种仅供试验的地......

阅读全文(3698) | 评论:0

fpga与cpld区别(2005-06-21 20:12:00)

摘要:一、 1.CPLD CPLD主要是由可编程逻辑宏单元(LMC,Logic Macro Cell)围绕中心的可编程互连矩阵单元组成,其中LMC逻辑结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于 CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。到90年代,CPLD发展更为迅速,不仅具有电擦除特性,而且出现了边缘扫描及在线可编程等高级特性。较常用的有Xilinx公司的EPLD和Altera公司的CPLD。 2. FPGA FPGA通常包含三类可编程资源:可编程逻辑功能块、可编程I/O块和可编程互连。可编程逻辑功能块是实现用户功能的基本单元,它们通常排列成一个阵列,散布于整个芯片;可编程I/O块完成芯片上逻辑与外部封装脚的接口,常围绕着阵列排列于芯片四周;可编程内部互连包括各种长度的连线线段和一些可编程连接开关,它们将各个可编程逻辑块或I/O块连接起来,构成特定功能的电路。不同厂家生产的FPGA在可编程逻辑块的规模,内部互连线的结构和采用的可编程元件上存在较大 的差异。较常用的有Altera、Xinlinx和Actel公司的FPGA。FPGA一般用于逻辑仿真。电路设计工程师设计一个电路首先要确定线路,然后进行软件模拟及优化,以确认所设计电路的功能及性能。然而随着电路规模的不断增大,工作频率的不断提高,将会给电路引入许多分布参数的影响,而这些影响用软件模拟的方法较难反映出来,所以有必要做硬件仿真。FPGA就可以实现硬件仿真以做成模型机。将软件模拟后的线路经一定处理后下载到FPGA,就可容易地得到一个模型机,从该模型机,设计者就很直观地测试其逻辑功能及性能指标。   二、 系统的比较,与大家共享: 尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点: ①CPLD更适合完成各种算法和组合逻辑,FP GA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。 ②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。 ③在编程上FPGA比CPLD......

阅读全文(10849) | 评论:1

c/c++头文件一览(转载)(2005-06-21 20:08:00)

摘要:C、传统 C++ #include <assert.h>    //设定插入点 #include <ctype.h>     //字符处理 #include <errno.h>     //定义错误码 #include <float.h>     //浮点数处理 #include <fstream.h>    //文件输入/输出 #include <iomanip.h>    //参数化输入/输出 #include <iostream.h>   //数据流输入/输出 #include <limits.h>    //定义各种数据类型最值常量 #include <locale.h>    //定义本地化函数 #include <math.h>     //定义数学函数 #include <stdio.h>     //定义输入/输出函数 #include <stdlib.h>    //定义杂项函数及内存分配函数 #include <string.h>    //字符串处理 #include <strstrea.h>   //基于数组的输入/输出 #include <time.h>     //定义关于时间的函数 #include <wchar.h>     //宽字符处理及输入/输出 #include <wctype.h>    //宽字符分类 ////////////////////////////////////////////////////////////////////////// 标准 C++ (同上的不再注释) #include <algorithm>    //STL 通用算法 #include <bitset>     //STL 位集容器 #include <cctype> #include <cerrno> #include <clocale> #include <cmath> #include <complex>     //复数类 #include ......

阅读全文(2503) | 评论:0

深入浅出ShellExecute(转载)(2005-06-21 20:14:00)

摘要:Q: 如何打开一个应用程序? ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW ); 或 ShellExecute(this->m_hWnd,"open","notepad.exe", "c:\MyLog.log","",SW_SHOW ); Q: 如何打开一个同系统程序相关连的文档? ShellExecute(this->m_hWnd,"open", "c:\abc.txt","","",SW_SHOW ); Q: 如何打开一个网页? ShellExecute(this->m_hWnd,"open", "http://www.google.com","","", SW_SHOW ); Q: 如何激活相关程序,发送EMAIL? ShellExecute(this->m_hWnd,"open", "mailto:nishinapp@yahoo.com","","", SW_SHOW ); Q: 如何用系统打印机打印文档? ShellExecute(this->m_hWnd,"print", "c:\abc.txt","","", SW_HIDE); Q: 如何用系统查找功能来查找指定文件? ShellExecute(m_hWnd,"find","d:\nish", NULL,NULL,SW_SHOW); Q: 如何启动一个程序,直到它运行结束? SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXEC......

阅读全文(5872) | 评论:0

伫立街头偶想(2005-06-21 20:10:00)

摘要:华灯初上 我在夜色中彷徨 流浪了几个世纪的情感 至今未找到栖息的地方......

阅读全文(4002) | 评论:0

外遇(2005-06-21 20:14:00)

摘要:一个人有了异性朋友,一般人统称为“艳遇”。一般来说,异性之间的情感之遇可分为五个层次:         一、“草木之遇”:纯粹是因为外貌吸引或欲念需求,或者只是因为都感到无聊甚至由于金钱关系,使双方走到一起,在短暂的欢娱之后各奔东西,很快就相互忘记,没有留下什么值得怀恋的记忆。这是最低层次的“艳遇”,也称“无情之遇”。            二、“浪花之遇”:两人都处在孤独之中,由于某种机缘而相遇,如水遇风,和岸相碰,在经历短暂的相互了解、相互熟悉之后,发现一些共同点,激起火花,产生兴奋,双方很快就掉进幻觉编织的情网里。当外部条件改变,幻觉消失,两人又重新成为陌路人。在这个层次上的“艳遇”往往持续时间不长,分别之后有恩有怨,日久之后印象就变得模糊。        三、“金玉之遇”:一方遇到出色或出众的异性,惊为天人,于是使出浑身解数,刻意追求之。被追求的一方终于被吸引被感动,经过较长时间的交往后,双方发现在气质上、性格上、才学上有许多相通之处,于是渐渐产生感情,也就是通常所说的“爱情”。        如果条件允许,也许会成为“爱人”,也许会成为“情人”。如果外部环境不支持,也可能只是精神上的异性朋友。无论结果如何,相互交往的那段时光,都会成为生命中的一段美好的回忆。这个层次的“艳遇”,是普通人所向往的。但是往往受外貌、气质、性格、才学、金钱、地位等外在条件的制约,如果有此一遇,也算可喜可贺了。         四、“珍珠之遇”:双方无意之间相遇,没有任何思想准备的,就被对方内在的涵养或音容笑貌所吸引,或者是因为无意之间的一件小事,引起两人的共鸣,在两人心间留下深刻印象。在不长时间的淡淡的交往过程中,双方都没有刻意去做什么、说什么。        分别后,天各一方。而在记忆深处,时常闪现当初相遇的一幕。也许后来会通过书信、电话联络,也许什么也不做。双方都无意改变生活现状,只是在心底里珍惜这份美好情感,如珍藏圆圆滑滑的珍珠在心底。如果彼此的修养够水准,就此为止;如果一不小心,就会掉到第三层次上去,那就“堕落成爱情”了。         五、“钻石之遇”:往往在一瞥之间,或一句话,或一件事……瞬间如闪电般击中双方的内心,两人迅速地在内心为对方留下一块专门的空间,相互感应,相互感动,相互牵挂,相互珍惜,成为一辈子的缘份。当然这样的事只有在异性之间才能发生,双......

阅读全文(3335) | 评论:0

C编程技巧荟萃(2005-06-21 20:14:00)

摘要:转载: /*从键盘中读取字符 功能:按下普通键时,返回其ASCII码 扫描码CODE=0*/ int INKEY(int *code) { int m; while(!bioskey(1))/*可加入无按键时代码*/; *code=bioskey(0); m=*code*255; if(!m) m=*code>>8; *code=*code&255; return m; } /*获取机器日期*/ int DATE(char *s,char type) { char dat[30]; int num; struct tm *tblock; time_t t; t=time(NULL); tblock=localtime(&t); strcpy(dt,asctime(tblock)); strcpy(s,""); switch(type) { case 'N': num=(*tblock).tm_year+1900; itoa(num,s,10); break; case 'Y': num=(*tblock).tm_mon+1; itoa(num,s,10); break; case 'R': num=(*tblock).tm_mday; itoa(num,s,10); break; case 'S': strcpy(dt,asctime(tblock)); MID(s,dt,12,8); break; } } return num; } /*将浮点数转化为字符串*/ /* 参数说明 data:需转换的浮点数;s:输出字符串;len:转换后的长度*/ void f_to_s(double data,char *s,int len) { int dec,sign,i; char *s1,s2[100],s3[100]; s1=0; s2[0]=0; s3[0]=0; s1=fcvt(data,len,&dec,&sign); if (!sign&&data>=1) { MID(s2,s1,dec+1,-1); MID(s3,s1,1,dec); strcpy(s,"+"); strcat(s,s3); strcat(s,"."); strc......

阅读全文(4642) | 评论:1

SQL SERVER中mdf和ldf文件从一个服务器移到另一个服务器的处理方法(2005-06-21 20:13:00)

摘要:目前我知道我有三个方法,可以给大家参考: 一是:在目标服务器上新建一个数据库,将新建文件取与原文件相同的名称后,关闭服务器,往往还需要将计算机注销,然后将原文件覆盖新建的数据库文件,就可以在目标文件上应用了。 二是:把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL Server Query Analyzer中用语句进行恢复: >>>>EXEC sp_attach_db @dbname = 'test', >>>>@filename1 = 'd:\mssql7\data\test_data.mdf', >>>>@filename2 = 'd:\mssql7\data\test_log.ldf' >>>>这样就把test数据库附加到SQL Server中,可以照常使用。如果不想用原来的日志文件,可以用如下的命令: >>>>EXEC sp_detach_db @dbname = 'test' >>>>EXEC sp_attach_single_file_db @dbname = 'test', >>>>@physname = 'd:\mssql7\data\test_data.mdf' >>>>这个语句的作用是仅仅加载数据文件,日志文件可以由SQL Server数据库自动添加,但是原来的日志文件中记录的数据就丢失了。 三是:在控制台管理器的数据库选项上右击,选择附加数据库选项,按照提示操作即可。但日志文件在这种方法中可能无法加入。 ......

阅读全文(5078) | 评论:0