博客列表

TSE-MAC的FIFO工作机制
发表于:2013-03-05 06:49:43 | 分类:TSE
浏览( ) | 评论( )

 TSE-MAC的FIFO工作机制 最近在这条Altera三速以太网(TSE)的MAC,目前基本能够从这个挂在MAC上的Avalon-ST总线上收发PC的IP包了。MAC是个试用版的IP核,内部框图如下。它通过MII/GMII/RGMII和FPGA外部的PHY交换数据。内部做了一些MAC该做的事,然后通过两个FIFO分别缓存以太网的收或发数据包。这两个FIFO读写的一端自然是MAC,另一端则是Avalon-ST总线。再说这两个FIFO的管理也很有学问,它要实现的功能是在尽可能不丢包(FIFO不能溢出或空读)的情况下收发数据。如图所示,这是RX FIFO用于控制的几个寄存器示意图。这里有4个寄存器。User guide上有如下的描述。光是看看这些枯燥的文字恐怕很难理解清楚它的工作机理。如果自己动手操作一把,遇上几次收发故障,那么再回头消化下估计就不难了。简单的来看,almost empty和almost full是实际上MAC希望提醒Avalon ST总线或PHY端(也可以理解为远端的以太网设备)注意当前FIFO真得快full或empty了。当然了,almost empty有一种情况不会发出

基于In-System Sources and Probes Editor的AD采集
发表于:2013-02-11 14:26:39 | 分类:SOPC
浏览( ) | 评论( )

 基于In-System Sources and Probes Editor的AD采集1 概述         该实例用FPGA的内部逻辑设计一个实时AD采样控制功能,该模块一方面不断的通过SPI接口采集AD芯片TLC549的模拟电压值,另一方面我们例化一个In-System Sources and Probes Editor用于在PC端查看当前采样值。         该实验的硬件平台为特权同学的SF-CY3核心板和SF-BASE板。SF-CY3 FPGA Cyclone III开发板套件http://item.taobao.com/item.htm?spm=686.1000925.1000774.16.mTv0ft&id=22439872377SF-BASE FPGA套件子板http://item.taobao.com/item.htm?spm=686.1000925.1000774.6.mTv0ft&id=1892226

跳出惯性思维
发表于:2012-12-01 13:30:26 | 分类:杂文
浏览( ) | 评论( )

跳出惯性思维         “一公斤棉花和一公斤铁,哪个重?”想必很多人都曾天真的脱口而出“当然是铁重啦”。         “穷人戴钻石,人家以为是玻璃;富人戴玻璃,人家以为是钻石。”台湾一位作家的这句话同样耐人寻味。         行为心理学告诉我们“一个人一天的行为有95%是习惯性的”。当然这里并不是说惯性思维不好,在硬件工程师这个职位上干得时间越长、项目接触得越多、积累的经验越丰富,往往越容易获得大家的认可。为什么?很简单,两个字:经验!但是,半导体行业的发展日新月异,摩尔大拿都声称要十八个月一变“脸”,何况我们这群只会拿着芯片七拼八凑的“小喽啰”们,如果不思变不创新,总是一条老路走到底,那么结果只有“坐吃山

GIO内部下拉带来的问题
发表于:2012-10-22 19:58:04 | 分类:默认
浏览( ) | 评论( )

 GIO内部下拉带来的问题问题和测试         在某产品中,一颗CMOS sensor的复位信号CMOS_RST和休眠信号CMOS_STB分别使用了1.5K电阻上拉,并且也分别连接到了CPU(TI的DM355)的两个GPIO上。由于发现了sensor的CMOS_RST和CMOS_STB信号一直处于不可控状态(经软件检测确认是管脚分配错误),仅靠1.5K上拉电阻使其维持在大约2.8V的高电平状态(貌似不太影响整个sensor的一般工作,正常高电平应该是3.3V)。因为产品有一些问题存在,在查错过程中找到了这两个异常GPIO,后文是对其的一些测试和研究。         在CMOS_RST和CMOS_STB信号的1.5K上拉电阻不变的情况下,做了一些测试,发现CPU控制的GIO=0无法将实际的输出拉到低电平。对CMOS_RST信号做了一些测试,如表1所示。表1 测试条件

8位无符号数乘法运算HDL设计实例
发表于:2012-10-16 19:19:19 | 分类:默认
浏览( ) | 评论( )

 8位无符号数乘法运算HDL设计实例原理分析         加减乘除是运算的基础,也是我们在小学课堂里的重点必修课。乘除运算虽然对于我们今天来说还是小菜一碟,让计算机做起来也是九牛一毛不足挂齿,但是要真探究一下计算机是如何完乘除运算的,可还真有些学问和技巧,并不是人脑那么9*9一闪而过81出来了,计算机虽然得到结果的时间可能比人要快上不知道多少个数量级,但它怎么说还是需要一个过程的。可能不同的CPU内部的运算原理和机制略有差异,我们也无法完全去把这些运算方式搞清楚,这个例程我们就老老实实的用移位累加的方式完成两个8位无符号数的乘法运算。这里先随便举个例子来说明我们的运算原理,例如8位无符号数189和25相乘。因为计算机只认识0和1,因此一切运算的基础都是0和1,所以我们的运算也必须是基于2进制来进行的。因此,我们首先要完成机制的转换。乘数189对应的2进制数为10111101,被乘数25对应的2进制数为00011001。按照我们最常用的10进制乘法运算的方式,我们可以得到如图1所示的2进制乘法。在这个运算过程中,我们从

Qsys与uC/OS学习笔记6:任务切换-续
发表于:2012-10-13 09:40:11 | 分类:uC/OS-II
浏览( ) | 评论( )

 Qsys与uC/OS学习笔记6:任务切换-续uC/OS-II总是运行进入就绪态任务中优先级最高的任务。确定哪个优先级最高,下面要由哪个任务运行了,这一工作是由任务调度函数OS_Sched (void)完成的。当前就绪任务要交出CPU控制权并进行任务切换的相关操作都调用了OS_Sched (void)函数。如图1所示,当前运行态任务交出CPU控制权必须是以下某个函数被调用或某事件发生:OSFlagPend()、OSMboxPend()、OSMutexPend()、OSQPend()、OSSemPend()、OSTaskSuspend()、OSTimeDly()、OSTimeDlyHMSM()、OSTaskDel()或中断等。图1         我们来看看OS_Sched (void)函数的程序://*_bspàUCOSIIàsrcàos_core.c void OS_Sched (void){#if OS_CRITICAL_METHOD == 3 

Qsys与uC/OS-II学习笔记5:任务切换
发表于:2012-10-12 06:54:33 | 分类:uC/OS-II
浏览( ) | 评论( )

 Qsys与uC/OS-II学习笔记5:任务切换         上个笔记提到调用任务延时函数后,系统将会进行任务切换,否则当前运行任务就会一直霸占着CPU的使用权。那么这个任务延时函数中到底有什么奥秘?调用它为什么能够让任务切换自如?这个笔记咱就要揭开uC/OS-II的一大设计精髓——任务切换。         特权同学并非软件工程或是计算机科班出身,还真没学过什么操作系统,对于CPU内部架构和工作机制的理解和认识完全靠自身的实践、摸索加一些教科书的研读。对于一些概念的阐述或许不够专业,如果有些偏差也非常欢迎大家提出来加以纠正,但是我想这些“草根”式的图文或许多少能够帮助大家快速的理解和认识一些工作机理,但愿“八九不离十”应该是形容这种状态比较合适的词汇吧。其实如果能起到这样的效果,那么对这些文章而言也就足够。毕竟一板一眼、中规中矩的教科书我们看得太多了,真的是有些审美

Qsys与uC/OS-II学习笔记4:任务状态与工作机制
发表于:2012-10-11 06:59:09 | 分类:uC/OS-II
浏览( ) | 评论( )

 Qsys与uC/OS-II学习笔记4:任务状态与工作机制前面一个笔记我们已经可以轻松的使用EDS提供的HAL构建一个uC/OS-II的模板工程,在这个工程里,所有和移植有关的问题都不用我们操心,我们只要放心的去设计我们的应用程序便可。而一个最简单的uC/OS-II工程也已经呈现在我们面前,三个最基本的步骤就可以完成一个我们曾经以为多么神奇的操作系统。但是,虽然我们能够构建两个最基本的任务,但说实在话,我们还没搞懂它到底如何工作的,依葫芦画瓢没有错,若能够搞清楚它的工作机理就更好了。         先来回顾一下两个task,如下代码:/* Prints "Hello World" and sleeps for three seconds */void task1(void* pdata){ while (1) {    printf("Hello from task1\n");    OSTimeDl

Qsys与uCOS学习笔记3:Hello uC/OS-II
发表于:2012-08-30 22:05:54 | 分类:uC/OS-II
浏览( ) | 评论( )

Qsys与uCOS学习笔记3:Hello uC/OS-II         uC/OS-II(又名Micro C/OS)是基于嵌入式系统的完整的,可移植、可固化、可裁剪的可剥夺型实时内核,其已经广泛应用在航空飞行器、医疗设备、工业控制等可靠性和稳定性要求较高的场合。该内核的代码也是完全开源的,如果不做商业用途,完全免费。因此对于广大的嵌入式爱好者与工程师们而言,了解OS从uC/OS-II开始不失为一个很好的选择。         之前是使用特权同学自己的SF-NIOS2开发套件进行了EDS上的uC/OS-II样板工程测试,为了当前学习笔记的持续性,这里重新就DE2-115板重新整理一个Hello uC/OS-II实例的创建和演示。 Qsys组件添加         在一个工程实例基础上,添加一个Interval Timer外设,设置该Timer的定时Period为

Qsys与uC/OS学习笔记2:系统仿真
发表于:2012-08-26 13:50:42 | 分类:uC/OS-II
浏览( ) | 评论( )

 Qsys与uC/OS学习笔记2:系统仿真         仿真在FPGA设计过程中举足轻重,在板级调试前若不好好花功夫做一些前期的验证和测试工作,后期肯定要不断的返工甚至推倒重来,这是FPGA设计的迭代特性所决定的。因此,在设计的前期做足了仿真测试工作,虽然不能完全避免后期问题和错误的发生,却能够大大减少后期调试和排错的工作量。         逻辑设计中需要做仿真,是因为逻辑设计大都是设计者原型开发的,不做仿真的话设计者肯定心里也没底。而用Qsys搭建的系统多是由已经成熟验证过的IP核组成的,还需要仿真否?这是个仁者见仁智者见智的问题,特权同学也无意深入其中不能自拔。过去用SOPC Builder时还确实想动手做做这类带CPU的系统级仿真,只可惜倒腾半天不是缺这个就是少那个,大都无功而返。这回上了Qsys,而且ModelSim-Altera对于Quatus II的支持也是做得越来越“体贴”了,所以今个再做了一些尝试