用户操作
[即时聊天] [发私信] [加为好友]
no nameID:BuilderChen
26557次访问,排名4477好友0人,关注者1
BuilderChen的文章
原创 22 篇
翻译 0 篇
转载 1 篇
评论 29 篇
最近评论
spgto:我也遇到差不多的问题阿,不过我在添加内部信号节点后,点仿真按钮后,内部信号节点就消失了,并没有显示仿真波形出来,不知道怎么回事?望楼主指教
我的 QQ 593178435
spgto:我也遇到差不多的问题阿,不过我在添加内部信号节点后,点仿真按钮后,内部信号节点就消失了,并没有显示仿真波形出来,不知道怎么回事?望楼主指教
我的 QQ 593178435
spgto:我也遇到差不多的问题阿,不过我在添加内部信号节点后,点仿真按钮后,内部信号节点就消失了,并没有显示仿真波形出来,不知道怎么回事?望楼主指教
我的 QQ 593178435
spgto:我也遇到差不多的问题阿,不过我在添加内部信号节点后,点仿真按钮后,内部信号节点就消失了,并没有显示仿真波形出来,不知道怎么回事?望楼主指教
我的 QQ 593178435
spgto:我也遇到差不多的问题阿,不过我在添加内部信号节点后,点仿真按钮后,内部信号节点就消失了,并没有显示仿真波形出来,不知道怎么回事?望楼主指教
我的 QQ 593178435
文章分类
    收藏
      相册
      我家那坏小子
      友情连接
      设计之美:海派-古古狗
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes
      2007年11月13日

      转载 状态机学习资料

      6.2.3.2 两段式状态机描述方法(推荐写法) 为了使FSM 描述清晰简介,易于维护,易于附加时序约束,使综合器和布局布线器更好的优化设计,推荐使用两段式FSM 描述方法。 本例的两段式描述代码如下: //2-paragraph method to describe FSM //Describe sequential state transition in 1 sequential always block //State transition conditions in the other combinational always block //Package state output by task. Then register the output module state2 ( nrst,clk, i1,i2, o1,o2, err ); input nrst,clk; input i1,i2; output o1,o2,err; reg o1,o2,err; reg [2:0]阅读全文>

      发表于 @ 2007年11月13日 10:36:00|评论(loading...)|编辑

      2007年11月08日

      原创 VHDL:理解信号与变量、并行语句与顺序语句

      初学VHDL,对一些问题总是感到困惑。比如,同样的赋值语句,在什么场合是并行的,什么时候又是顺序的?信号与变量有什么区别,为什么在PROCESS 里,对信号赋值的结果要等到进程挂起才起作用,而变量赋值却立刻起作用?其实,从语句产生的电路这个角度,可以更深刻地理解这些问题,下面是我自己摸索的一些理解方法,有不妥之处请大虾们指正! 1、赋值语句。 同样a <= b的赋值语句,会形成什么电路,起关键作用的是敏感信号。 a) 如果a <= b是在进程之外,那么隐含的敏感信号就是b,那么,这个赋值语句就形成一条连线。 b) 如果是在一个同步进程中,如if (rising_edge(CLK)) then a <= b,这时候,就会形成一个触发器,因为敏感信号是时钟边沿。 c) 如果敏感信号是一个电平信号,那么会形成一个锁存器。如一个不完整的if条件:if (cond = '1') then a <= b; 2、并行语句和顺序语句。 从形成的电路的角度,并行语句最终会有两种形式: a) 并联或不相联的逻辑门或组合电路。因为是并联或阅读全文>

      发表于 @ 2007年11月08日 14:16:00|评论(loading...)|编辑

      2007年05月18日

      原创 关于VHDL状态机:不听老人言,吃亏在眼前。

      以前看了不少关于如何写VDHL状态机的文章,都是提倡使用二段式或三段式的写法,都建议避免使用一段式的写法,但看了之后,都没什么体会。象我们写软件出身的,心理上总喜欢一段式的写法,觉得思路比较连贯,而且可以写在一个process里,“内聚性”比较高。软件工程师是最讨厌多个函数共用全局变量的了。 但对于硬件开发,就不一样了。因为VHDL还是无法完全屏蔽掉硬件的物理特性,不好的布局,会使得写的逻辑错误执行。最近写的一个状态机,就遇到了这个麻烦。因为喜好的缘故,加上状态机里面有计数器,用组合逻辑写比较麻烦,于是我用了一段式的写法。结果实际运行的时候,发现状态机经常无故锁死,用逻辑分析仪看,发现陷入了非法的状态,而且when others语句也无法使状态机回到IDLE状态。开始怀疑逻辑上有错误,折腾几天后,把状态切换部分独立出来放在一个同步process里,问题解决了。虽然偶尔还会发现落入非法状态,但状态机会自动恢复到初始状态,不会锁死了,而程序逻辑没有做如何修改。看来以后还是得规规矩矩用二段或三段式的写法了。为了便于记忆,把二段、三段式的特点终结成几句话: 阅读全文>

      发表于 @ 2007年05月18日 13:53:00|评论(loading...)|编辑

      2007年03月26日

      原创 Quartus II v6.0 的波形仿真器

      用Quartus II v6.0 的波形仿真器仿真模块内部信号,有时候总会出现错误的结果。非常简单的逻辑,也是仿真结果不对,反复检查代码,实在找不出哪个地方不对。被这个事困饶挺久了。有点怀疑Quartus的仿真部分有问题,使用外部EDA工具ModelSim来做仿真,也是一样的结果。最后,干脆在ModelSim新建项目,整个代码都使用ModelSim来编译和仿真,居然结果就对了!看来,应该是Quartus II输出给ModelSim的输出文件中就有问题了。以后用Quartus II仿真查看内部信号的时候,要小心啊! 阅读全文>

      发表于 @ 2007年03月26日 09:37:00|评论(loading...)|编辑

      2007年02月15日

      原创 dm642的EDMA

      dm642的EDMA功能非常强,其概念也比其他的DMA复杂点,但了解了下面这些词也就不难了。 Element: EDMA 传送的最小单位,可以是8、16、32bit。 Frame: 多个element组成一个Frame,Frame中的Element可以是间隔的或连续的。 Array: 多个连续的Element组成一个Array。注意必须是连续的,这是Array与Frame的区别。 Block: 多个Frame或Array组成一个Block。 1D Transfer: 多个Frame组成的Block叫1D Block,1D Block的传送就是1D Transfer。 2D Transfer: 多个Array组成的Block叫2D Block,其传送就是2D Transfer。 Frame Index: 用于计算下一个Frame或Array的始地址。上一个Frame或Array的最后一个Element地址 加上Frame Index,就得到下一个Frame或Arr阅读全文>

      发表于 @ 2007年02月15日 09:59:00|评论(loading...)|编辑

      2007年02月01日

      原创 TI DSP dm642的HPI口

      nHSTROBE信号由nHCS, nHDS1, nHDS2在DSP内部形成,其条件是:当nHCS=0,并且nHDS1与nHDS2不同时,nHSTROBE为0,否则为1。 写HPI寄存器时,HPI在nHSTROBE的下降沿锁存控制信号,在上升沿锁存数据。所以在与HPI通讯时,可以在nHSTROBE的上升沿给出控制信号,在下降沿给出数据。 DSP内部HPI是通过EDMA操作内存的,当DSP处于RESET状态时,片内设备也是处于RESET状态,这时候对HPI进行操作时没有作用的。只有一个例外,就是当使用HPI boot模式启动时,片内设备是Active的,只有CPU是处于stall状态,这时候是通过可以HPI读写内存的。完成后给DSP一个DSPINT, CPU就开始运行了。 阅读全文>

      发表于 @ 2007年02月01日 15:36:00|评论(loading...)|编辑

      2007年01月10日

      原创 Nios II中DMA设备的使用

      Nios II的标准设备软IP中有一个DMA设备,在SoPC系统开发中是一个非常常用的设备。但在Nios II的文档对该设备的说明里,一些概念和说明方式跟一般有些不同,容易造成初次接触的人一些理解上的混乱。 DMA的概念其实挺简单,无非就是把一定长度的数据从源地址传送到目标地址。其中有一点比较重要的是对于地址的操作方式,一种是地址自增,另一种是地址固定。就是说DMA控制器读或写完一个数据后,对地址是自动增加,下次读写下一个地址,还是不变,下次还是读写同一个地址。由于地址固定模式一般是用在外设,所以在Nios的文档中,使用地址固定模式的一方就称为设备(Peripheral),而使用地址自增模式的一方则称为内存(Memory)。 在HAL的API中,对于地址自增一方,需要打开一个接收或发送的Channel,然后配置地址;而如果是地址固定的一方,则不需要打开一个 Channel,只需要用alt_dma_rxchan_ioctl()的ALT_DMA_RX_ONLY_ON或ALT_DMA_TX_ONLY_ON 参数设置,并配置地址即可。下面是三阅读全文>

      发表于 @ 2007年01月10日 09:42:00|评论(loading...)|编辑

      2006年12月21日

      原创 linker与loader,x86与单片机

      linker主要完成的工作: 重定位:目标模块被创建时假设的目标地址都从0开始,linker把同名的section合并起来,然后为各个section规划run-time时刻的地址。linker假设run-time时刻的开始地址也是从0开始。 符号解析:处理多个模块之间符号的引用。 loader主要完成的工作: 程序加载:linker生成的可运行文件(如ELF, COFF)中,已经包含了各个section的运行地址、在文件中的位置(offset)和section的属性(read, write等)等信息,loader根据这些信息将各个段拷贝到指定的内存中准备运行。 重定位:loader在加载时有可能进行再一次重定位,最终确定程序在run-time时刻的绝对地址。注意linker总是假设run-time空间是从0开始的。 x86与单片机之间linker和loader的不同: 对于x86与mcu,linker的作用基本是一样的,但loader有较大不同。在x86中,loader就是从外存(阅读全文>

      发表于 @ 2006年12月21日 14:32:00|评论(loading...)|编辑

      2006年12月08日

      原创 别针换别墅:童话的破灭

      昨天,一位朋友发了一个网址过来,打开一看,说的是一个“别针换别墅”的童话。一个叫艾晴晴的女孩,受了一个外国小伙子的启发,于是决定用一个曲别针开始,通过与陌生人的物物交换,最终换到一栋别墅。经过几天的努力,她已换过了手机、照片、项链等东西,现在已经换到了两瓶价值8000元的名酒。 真是一个很美好的童话。可惜很快,童话就破灭了。 在许戈辉的梦工厂节目中,一个小女孩试图用她画的别墅来交换艾晴晴手里的价值8000块的酒,送给她生日的爷爷。她拒绝了。事后她辩解说她怀疑画是工作人员画的。问题是,要是你怀疑的话,你可以要求见见那位小女孩,当面跟她交换呀!网友夜公子说得好,她已经遗忘了童话的美好,已经太懂得计算了。这一刻,我知道童话已经破灭了。 在我看来,真正完美的童话,是艾晴晴最终换到了别墅,然后又用这座别墅,换回一个漂亮的曲别针。艾晴晴,will you? 阅读全文>

      发表于 @ 2006年12月08日 13:13:00|评论(loading...)|编辑

      2006年11月09日

      原创 PCI卡的WDM驱动开发笔记

      八、九 月份的时候为一块PCI卡驱动程序增加了bus master DMA和中断服务功能,到现在有一段时间没弄,一些细节有些记不大起来了,赶紧把一些要点记录一下,以免日子久了都忘记了。 阅读全文>

      发表于 @ 2006年11月09日 13:32:00|评论(loading...)|编辑

      2006年11月02日

      原创 VHDL经验点滴

      一些学到的或自己总结的VHDL经验点滴,纪录下来,以免以后忘记了。因为有些是自己总结的,肯定有错误或不周之处,欢迎高手指正!内容逐步补充中。 1。如何判断一个process综合结果是组合逻辑还是时序逻辑? A:一个比较简单的办法是看敏感信号和条件语句的条件,如果是电平触发的,很可能是时序逻辑;如果是边缘触发的,则是时序逻辑。 2。采用二进程状态机比单进程状态机好,把同步时序和组合逻辑分开,有利于综合器优化代码。碰到需要对时钟计数的时候,可能会觉得用单进程方便点,如果要用双进程结构的话,可以把计数放在同步进程里,给出一个计数值,而组合进程用这个值作为输入,这样保证组合进程仍然是组合逻辑(里面不含边沿触发条件)。 阅读全文>

      发表于 @ 2006年11月02日 08:33:00|评论(loading...)|编辑

      2006年09月29日

      原创 第一个VHDL程序

      今天挺开心,偶的第一个VHDL的模块完成了。这是一个使用Altera的CycloneII EP2C20F256的FPGA,通过HPI接口向TI的DSP(TMS320DM642)内存中写入数据的模块,实现了HPI的控制时序控制,支持地址自增模式, ,时序仿真和实际运行时的逻辑分析都令人满意。 为了写一个32位的数据到DSP内存中,需要写4次HPI寄存器,因为HPI使用16位接口,两次将目标地址写入PICA寄存器,另两次将数据内容写入 HPID寄存器中(每次16位),才可以完成一个32位数据的写入。模块中使用了两个PROCESS,辅助进程实现写HPI寄存器的时序,供主进程使用;主进程则控制辅助进程写4次HPI寄存器,以完成一个32位数据的写入。 辅助进程是一个状态机,大概转换过程是:就绪状态 => 步骤1 => ... => 步骤n => 完成状态。当控制信号被拉高时,辅助进程即开始工作,完成后停止在完成状态。只有主进程将控制信号拉低,辅助进程才回到就绪状态,然后控制信号再被拉高时,开始下一次操作。这是为了防止控制信号被一直拉高,而辅助阅读全文>

      发表于 @ 2006年09月29日 15:30:00|评论(loading...)|编辑

      2006年07月07日

      原创 几种建立http-tunnel的方法

      基本概念不多解释了,直入主题。GNU HTTP Tunnel (http://www.nocrew.org/software/httptunnel.html)是一个开源的http-tunnel项目,包括了tunnel server(hts命令)和tunnel client(htc命令),有(x)nix和windows版本。我们就用它来建立自己的tunnel。 1。静态tunnel。 http-tunnel是一个完全透明的通道,直接将你的连接forward给目标服务端口,因此当你连接tunnel的本地侦听端口时,就相当于直接连接到目标服务端口。例如你要建立一条可以访问外部POP3服务器的隧道,可以建立如下连接: htc ------------> http proxy ------------------------> hts ------------------------------> POP3 serve (localhost:8888) (proxyhost:3128) 阅读全文>

      发表于 @ 2006年07月07日 08:48:00|评论(loading...)|编辑

      2006年06月20日

      原创 一个不错的matlab入门教程

      一个不错的matlab入门教程: http://libai.math.ncu.edu.tw/bcc16/B/matlab/index.shtml阅读全文>

      发表于 @ 2006年06月20日 16:52:00|评论(loading...)|编辑

      2006年05月25日

      原创 在Windows CE增加自定义中断处理

      基于S3C2410,Windows CE4.2,BSP是smdk2410。WinCE的中断处理是三个映射关系: ISQ --> Interrupt ID(逻辑中断号) --> Event对象。 当中断发生时,ISR(中断服务例程)返回该中断号对应的逻辑中断号,然后尽可能快地返回;随后CE就set该逻辑中断号对应的Event对象(如果有的话),以唤醒在该Event等待的IST(中断服务线程),大部分工作都是由IST来完成。一般来说IST是存在驱动程序里,单其实放在普通的应用程序里也可以,尤其是对应只有一个应用程序使用的特殊硬件更方便。因为对应CE来说其实驱动程序也只是一个普通的DLL,也是运行在用户空间。 为了简单起见我们就直接修改BSP包的ISR部分,IST也直接在应用程序里实现,步骤如下: 1、在BSP的oalintr.h里定义自定义中断的逻辑中断值,如: #define SYSINTR_MYINTR (SYSINTR_FIRMWARE + 10) 2、修改KERNEL\HAL\cfw.c中的以下三个函数,增加对自定义中断的阅读全文>

      发表于 @ 2006年05月25日 14:03:00|评论(loading...)|编辑

      2006年05月17日

      原创 继续blog,继续coding......

      四月份换了份工作,有一段时间没有写blog了。新公司做ARM平台的开发,目前用的是uCOS,有打算以后迁移到WinCE上,所以目前正研究把WinCE在S3C2410上跑起来。 阅读全文>

      发表于 @ 2006年05月17日 13:29:00|评论(loading...)|编辑

      2006年03月23日

      原创 西门子MC55 GPRS模块的怪事

      西门子的MC55无线模块据说是当今市场上尺寸最小的三频模块,只有以前用的TC35i的三分之二大的样子,而且功能强大,内嵌TCP/IP协议栈,这样一来就不必在嵌入系统中实现TCP/IP栈了。 但是高兴得太早了,今天把模块接上串口,用超级终端连上试试,却发现没法使用TCP/IP相关的命令,在说明里"Internet Service Commands"里的AT命令,象AT^SICS, AT^SISS这些都返回一个ERROR,真是怪事。其他GPRS方面、SMS以及语音拨号方面的命令都没问题呀~~~~~~难道这只是个MC35,不内嵌TCP/IP协议栈的??明明是MC55没错呀。打电话问代理商,也说不明白。没办法,无果而终,手头还有其他活,等有时间再弄罢。 阅读全文>

      发表于 @ 2006年03月23日 16:06:00|评论(loading...)|编辑

      2006年03月22日

      原创 ATMEGA128上跑的ucosII

      一个在ATMEGA128上跑的ucosII,经过调试成功,由Ole Saether,Jesper Hansen和Julius LuukkoOle Saether移植。可惜这里无法上传文件,有需要的朋友留下邮箱,我会发过去。阅读全文>

      发表于 @ 2006年03月22日 16:44:00|评论(loading...)|编辑

      原创 Concepts in C++0x

      C++0x提出一个新特性:Concepts。什么是Concept?简单讲Concept就是对某个类或某段代码的一组“要求”。怎么解释呢?其实一直以来,“对类的要求”是以“实现某个接口”或以“从某个类继承”这些形式来体现的。例如开发一个COM组件,要求必须实现IUnknown等接口;再例如MFC中窗口类必须从CWin继承等等。这些形式的缺点,就是这些要求对类之间的结构是侵入性的,我们经常体会到这种侵入性给我们带来的烦恼,比如我们从业务角度已经定义了继承结构,而为了使用某个框架,又要求同样的类建立框架要求的继承关系或接口......如果要对系统做比较大的调制,更是让人头痛。所以Concepts的出现,就是为了以一种低侵入的方式来对类提要求,使得我们在组织类结构上简单、灵活。 对C++来说,Concept对模板带来更大的好处。我们知道,要模板对参数类也是有“要求”的,而且提要求的方式比上面两种更显得隐秘和诡异。比如说,一个取最大值的模板函数要求输入的参数类具有"比较大小"的操作,如"<"操作符或"less_than()"之类的成员函数。如果传入一个不具有"比较大小"操作阅读全文>

      发表于 @ 2006年03月22日 16:11:00|评论(loading...)|编辑

      2006年03月17日

      原创 AVR单片机开发笔记

      使用 AVR单片机开发短信报警系统时碰到不少问题,是跟单片机开发有关的: 1,内存范围造成堆栈错误。avr-gcc的栈底是内存的最顶端。由于ATmega128被设置了mega103兼容模式,而编译时 却以mega128为目标处理器。mega103是4000字节内存,mega128是4096字节,造成栈底指向了不存在的内存地 址,结果一运行到函数调用语句,返回时程序跑飞。 2,内存不足。mega8515只有512字节内存,程序定义了较多变量时,调用到嵌套比较多的函数时,就发生内存溢出 而跑飞。 3,int类型长度。8位机的int长度为8位,int范围是正负127,碰到比较长的短信PDU就溢出。可以使用long或int16_t, int32_t这些类型。 4,printf()函数无法处理较长字符串。当存在格式化符时,似乎超过127个字符的字符串就无法正常输出,可能跟该函数 的内部缓冲区大小有关系。 5,烧错时钟fuse位,导致串口有时乱码。电路上使用阅读全文>

      发表于 @ 2006年03月17日 16:42:00|评论(loading...)|编辑

      Csdn Blog version 3.1a
      Copyright © BuilderChen