EDN首页   博客首页

最新日志

发表于:2008-11-17 16:19:20
标签:无标签

2

SPI核的控制

1.实验设备

(1)       硬件:PC机,EasyFPGA030实验板.(有条件的可以准备一个逻辑分析仪)

(2)       软件:Libero

 

2.应用的器件

1)EasyFPGA030实验板

 

3.实验内容

     Libero软件提供一个SPI的软核,这样能够为SPI的应用场合提供一个十分便捷的方案,用户只要先对软核进行配置,然后就可以正常使用.本章我们的目的就是要现实SPI软核的初始化,然后一直发送数据。(本人验证的方法就是利用逻辑分析仪读取数据)

 

4.实验原理

   我们总终要实现的就是能够利用SPI接口来发送数据.在发送数据前,首先要对SPI核进行配置,如传输速度,发送顺序,主从模式等.如图1中的SPI_CTRL模块就是负责配置.CORESPI就是Actel的一个软核.

 

点击看大图

 

     CTRL_SPI代码如下:

//**************************CTRL_SPI.V**************************************************

//模块名称:CTRL_SPI.V

//功能描述:红外接收模块

//适用范围:Actel的芯片

//

//版权声明:

//    1)本代码属个人知识产权,保留最终解析权。

//    2)本代码仅供交流学习,未经本人同意不能用于其它用途。

//  

//_______________________________________________________________________________

//

// Created by:                    YI CHENG

// QQ:                                506009199

// Email:                             fsyicheng@21cn.com

// Created date:                  2008-11-19

// Version:                          1.0

//********************************************************************************
module SPI_CORE(CLK,nRST,m_miso,m_clk,m_mosi);
input CLK;          //48MHz
input nRST;
input  m_miso;
output m_mosi;
output m_clk;

//----------------------------------------------------
wire [7:0]datain_wire;
wire [7:0]spi_dataout;
wire we_wire;
wire re_wire;
wire tx_reg_wire;
wire rx_reg_wire;
wire interrupt_wire;
wire [1:0]addr_wire;


//------------------------------------------------------
CORESPI core_SPI(
        .m_ss(),                                  //选择从机
        .data_in(datain_wire),                    //数据的输入
        .data_out(spi_dataout),                   //数据输出端
        .addrbus(addr_wire),                //读写寄存器的地址
        .sysclk(CLK),                             //系统时钟
        .nreset(nRST_wire),                         //异步复位
        .m_sck(m_clk),                            //SD卡的时钟
        .m_miso(m_miso),                      //SD卡的数据输出
        .m_mosi(m_mosi),                      //SD卡的数据输入
        .s_sck(),
        .s_miso(),
        .s_mosi(),
        .s_ss(),
        .enable_master(),
        .enable_slave(),
        .we(we_wire),                                //写使能
        .re(re_wire),                                //读使能
        .interrupt(interrupt_wire),
        .tx_reg_empty(tx_reg_wire),                //发送寄存器满标志
        .rx_data_ready()
          );

 

SPI_CTRL core_ctrl
         (
         .CLK(CLK),
         .nSET(nRST),             
         .nRST(nRST_wire),         
         .tx_reg_empty(tx_reg_wire),
         .rx_reg_empty(rx_reg_wire),
         .interrupt(interrupt_wire),
         .SEND_DATA(8'hAA),               
         .SPI_data(datain_wire),
         .ADDbus(addr_wire),
         .WE_SPI(we_wire),
         .RE_SPI(re_wire)

         );

 


endmodule

 

配置过程仿真如图2:

点击看大图

 

配置完成后,系统会一直在发OX77,数据可以在逻辑分析仪上看到效果.

 


 

 

 

 

 

 

 

待续........(又准备加班了,哈哈!)

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 原创

该用户于2008-11-19 16:53:13编辑过该文章

评论(0) | 阅读(128)
发表于:2008-11-13 13:30:53
标签:FPGA  Actel  

2

红外测障

1.实验设备

(1)       硬件:PC机,EasyFPGA030实验板,红外接收头,红外发射头

(2)       软件:Libero

 

2.应用的器件

1)红外接收头;

2)红外发射头.

 

3.实验内容

        上一章已经介绍了红外线接收的有关内容,本章主要是对其进行延伸和应用.通过利用FPGA来产生38KHz的频率来驱动红外发射头,然后红外线在遇到障碍物后返回,红外接收头收到触发信号就会给控制器发出中断处理信号

 

4.实验原理

本文使用红外接收头,红外发射头都是通用的器件,其中红外接收头还是上一章已经在使用的了,所以原理可以参考上一章.

代码如下:(发送端)

//**************************IR_CTRL.V*****************************************************

// IR_SEND_CTRL.v

//功能描述:红外接收模块

//适用范围:小车避障

//

//版权声明:

//    1)本代码属个人知识产权,保留最终解析权。

//    2)本代码仅供交流学习,未经本人同意不能用于其它用途。

//  

//_______________________________________________________________________________

//

// Created by:                     YI CHENG

// QQ:                                506009199

// Email:                             fsyicheng@21cn.com

// Created date:                   2008-11-10

// Version:                          1.0

//********************************************************************************

module IR_SEND_CTRL(CLK,DATAOUT);
input CLK;
output DATAOUT;
reg DATAOUT;

 

reg [9:0]clk_cnt;

 

always @(posedge CLK)
 begin
   if(clk_cnt==10'd632)
       begin
         clk_cnt<=10'd0;
         DATAOUT<=~DATAOUT;
       end
   else
     begin
      clk_cnt<=clk_cnt+1'b1;
     end
 end


 endmodule

 

 

 

 

--------------------------------------------------------------------------------------------

EasyFPGA030 DIY实验

链接地址: http://blog.ednchina.com/yicheng/177861/message.aspx

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 原创

该用户于2008-11-13 14:10:30编辑过该文章

评论(0) | 阅读(149)
发表于:2008-11-10 11:59:31
标签:interface  

0

信号接口类型

BNC接头 

       有别于普通15针D-SUB标准接头的特殊显示器接口。由RGB三原色信号及行同步、场同步五个独立信号接头组成。主要用于连接工作站等对扫描频率要求很高的系统。BNC接头可以隔绝视频输入信号,使信号相互间干扰减少且信号频宽较普通D-SUB大,可达到最佳信号响应效果。


  BNC接头,是一种用于同轴电缆的连接器,全称是Bayonet Nut Connector(刺刀螺母连接器,这个名称形象地描述了这种接头外形),又称为British Naval Connector(英国海军连接器,可能是英国海军最早使用这种接头)或Bayonet Neill Conselman(Neill Conselman刺刀,这种接头是一个名叫Neill Conselman的人发明的)。
  BNC接头可没有被淘汰,因为同轴电缆是一种屏蔽电缆,有传送距离长、信号稳定的优点。目前它还被大量用于通信系统中,如网络设备中的E1接口就是用两根BNC接头的同轴电缆来连接的,在高档的监视器、音响设备中也经常用来传送音频、视频信号。
  被淘汰只不过是10Base-2以太网,这种网络使用50欧的RG-58A/U同轴电缆的,速率为10Mb的,总线型网络,维护不便。所以现在组建这种网络的BNC接口网卡也被淘汰了。

系统分类: 电源技术   |    用户分类: 无分类    |    来源: 整理

评论(0) | 阅读(87)
发表于:2008-11-4 14:19:11
标签:无标签

1

技术人员的最终出路

        技术人员,大家都觉得工资高,工作稳定,还能学到很多的东西。是大部份走出校门或性格内向,或希望过平静生活的人的必然选择。其实,你们有没有问过自己,这条路到底走对了吗?
     一个刚毕业的大学生,从事销售和从事技术两种不同的工作,可能工资的差距会达到数倍之远。对于初出校门的人来说,不无一种极端的诱惑力。刚毕业的年青人,当然会果断的选择技术之路。
     两年后,我们再看看,由于经验的积累,做业务的积累了部份客户资源,做技术的积累了好的经验,在各自的领域内都大展开了手脚,收入也基本接近了。
     再以后呢,技术之路越来越难走,毕竟做技术需要的大量的时间和精力,否则就跟不上现在时代的技术更新了,做业务的呢,客户群越来越大,经验越来越丰富,谁的收入会更高?
     两种不同的职业,它们有着各自不同的特点,技术行业是个撑不死,饱不了的地方,而销售行业则是没有尽头的发展之路。
     过了三十岁,大家会选择什么呢,结婚、生子,人生的一条老路,做技术的大多都成为了技术部门的负责人,职位不错;做销售的呢?可能还是个业务员,毕竟做大量的业务都集中在少数人手里。古往今来,财富的集中是如此的相似!但是观察两个职业成功人士的比较,是不是相差太远了? 
        学到死,做到死、发不了财的技术,有什么值得人留恋的!
     到了三十岁,你还有自信面对繁重的工作吗?你有刚出社会的人的活力吗?你能和他们比工作时间,玩命地在老板面前表现吗?你能丢下妻儿出差一、两个月吗?能被小你十来岁的小孩命令来命令去吗?
     我不能。。。。。。
     有人会说,我有了技术!
     技术经验是什么?一些老的,过去了的东西,他代表着你所留恋的过去,你所放不下的那一部份,你会以经验来判别事物,选择工作方法。在新老技术交替的时间内,经验可以起到承前启后的作用,让你威风八面。可是,你还会用到多少两年以前的经验呢?
     大家所掌握的技术终会过时,脑子僵化的时候总会到来。那时,你何去何从?
     如果你的目标只是买个狗窝,摆个小烟摊,请不要再往下看了。“知足者常乐”也是一种人生的境界,我羡慕那些五台山上的和尚,我做不到!
     到处是高级住宅,我为什么只住10平的小屋?满大街跑的小车,我为什么要天天挤公交?我要为三十岁后不再挤公交车而奋斗!
    
       转型------技术人的必须选择!
    
     转型做什么呢?
     技术的优势在于什么?前些年是不是白干了? 

  如何转型? 
     
     让我们分析一下职业,什么样的工作能让我们越老越好 
     
   干部!
     不用说就是第一名,看看****领导人就知道了嘛。 
     
   财务
     每个老总都喜欢用年龄大点的,稳重嘛!大部份公司还要请个老头子之类的做财务总监。只拿工资不打卡。无它,做假帐的高手。我家老头子每到年底可是按天拿钱。 
     
 教师 
        好工作啊,老教授嘛,不老怎么成得了教授。取老婆的重点发展目标。嫁嘛?就算了。
     上面所说的几个职业,技术人是很难有机会了,毕竟大多数人没有办法再转这么大个弯。
     我们的出路,只有两个方面:销售和技术型管理! 
     
 先说说做销售。 
        大家是不是有这种感觉,做销售的人天天都在说现在的客户难打交道。而你是不是感觉客户其实人很好,很容易成为朋友。这就是你的优势! 
        你先前的技术基础,己经让他们很容易的接受你了。而你和他们有着很多的话题,能真正的为他们解决很多实际的问题。经常站在他们的角度为他们着想,你说出来的话能令他们信服。这样的业务人员,哪个客户不爱呢?
     做销售,最难的怎么和客户取得第一次的联系,你己经可以依靠技术突破这一点了,你还怕什么。只要心不太黑,客户永远都是你的朋友。
     只要多学学心理学,好好锻炼一下自己的口材、勤减一下肥。碰几次壁、吃几次亏后你哪点不像是业务高手。 
     
   再说技术型管理。 
     
       你己经有了技术,有了那么多经验。只要把它们全部拿出来,做事、培训新人。你会发现别人看你的眼睛都是仰视的。其实,你不过是剥夺了他们实际动手的机会,也许还会让他们顺着你的思路,成为你延长了的手。成为你表现能力的更大的舞台。那时,一切的功劳都是你的,老板怎么会不重视你,你的职位又怎会不上升了? 
       不过,这只是下乘之道。 
       上乘之道在于攻心。。。。。。
     首先在于攻自己的心。
    
     第一步,树立起自己的目标,多少时间内,工资上涨多少、职位到什么。不管你的直属上司是老板还是谁。如果己经觉得到头了,就离开吧。寻找新的目标。不要犹豫。
    
     第二步,拿出自己的所有能力,展现给其它人看,尽心尽力做好每一件事情。也许,伯乐的眼睛正在这时候盯着你。
    
     第三步,提升自己技术和管理能力,我所指的技术能力不是要你再不停的追求最新的技术,你没有那么多时间了。应该反过头来,寻求技术的本源,掌握了他,技术再怎么发展,你只需要花一点点时间就能掌握最新的。
    
     对于管理能力,只要不损害老板的利益,该管的尽量去管,不该管的尽量提意见,无论对错,无论成败,对你来说,都是经验的积累。
    
     第四步,敢于担起责任,不管事情的结果是否会失败。一个有勇气承担失败责任的人,更会让人尊敬。而且,失败了你又会损失多少了,最大不过是走人罢了。 
 其次攻他人的心 
        无论是对上还是对下,都应该是有勇有谋,利用技术的理性分析能力,把握住事物的关键,“知己知彼”的结果,绝大部份都是“百战不殆”。
     对下,应该尽量的去关心他们,因难自己背;好事让点出来,名声让出来一点,反正你的名声也不少了,他们做得好,别人也会说你带得好;他们做错了,你再出马搞定,就不是一点点名声了。
     对于属下和同事,也不要保留技术,我们不是靠手艺吃饭,不是收藏古董,为什么非要等到变成垃圾了才拿出来丢人现眼呢。尽力去做吧!让大家都成为你的徒弟。你的人气自然就来了。
    
     总之,还有很多很多。。。。。。
     我想,最辉煌的时间总会过去的,在这个充满了金钱的社会,谁不是天平上的的砝码。同样大小的黄金,总要重过铁吧!
     在这里,我一直在想着,想着以后我应该走的路,同时也祝各位住自己的房子,开自己的车子,花自己的票子,摆自己的面子。

系统分类: 生活点滴   |    用户分类: 无分类    |    来源: 转贴

评论(4) | 阅读(190)
发表于:2008-11-4 12:08:30
标签:FPGA  一起玩吧  

5

EasyFPGA030 DIY实验

       EasyFPGA030实验板名副其实的Easy, 十分容易上手,当我们把光盘的例程跑通后,  估计整天都寝食难安,到底我们如何能够DIY一些实验,如何让实验板大放光彩,张扬个性呢?哈哈,一起玩吧!

       本人根据手上有的材料,准备自己DIY几个实验,想通过抛砖引玉,聆听大家的意见,跟各位学者"取经".

实验安排:

(1)红外接收

链接地址:http://blog.ednchina.com/yicheng/177627/message.aspx

--------------------------------------------------------------------------------------------

(2)红外测障(11月15日发布)

链接地址:   http://blog.ednchina.com/yicheng/181160/message.aspx

--------------------------------------------------------------------------------------------

(3)SPI核的控制(11月16日发布)

链接地址:   http://blog.ednchina.com/yicheng/181924/message.aspx

-------------------------------------------------------------------------------------------

(4)计时器(11月30日发布)

链接地址:

-------------------------------------------------------------------------------------------

(5)电机调速(待定)

链接地址:

-------------------------------------------------------------------------------------------

(6)避障小车(新年乐子)

链接地址:

-------------------------------------------------------------------------------------------

 

 

 

待续.......

 

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 原创

该用户于2008-11-19 17:17:36编辑过该文章

评论(0) | 阅读(386)
发表于:2008-11-3 11:24:57
标签:FPGA  Actel  

5

EasyFPGA030进阶(一)--红外接收

1.实验设备

(1)       硬件:PC机,EasyFPGA030实验板,红外接收头,遥控器(具体型号下面介绍)

(2)       软件:Libero

 

2.应用的器件

1)红外接收头

2)遥控器:本文使用的遥控器内部芯片为HS6221

 

3.实验内容

     遥控器使用方便,应用广泛,同时具有长远的发展前景,因此本实验想通过红外接收在FPGA中的应用来说明红外的个别工作原理,希望通过举一反三,使读者能够对红外遥控熟练掌握。

 

4.实验原理

本文使用的遥控器内部使用的芯片为HS6221,因此着重针对其的原理来展开说明,同时据业内人士介绍,很多的数字机顶盒的遥控都适用的。

首先介绍一下接收头,由于是接收、放大一体化,所以接收性能还是比较理想的。实物如下图:

仔细观察一下引脚的排列,只有地,5V电源,数据端,安装十分方便。

硬件就这么简单,接下来就是程序的编写了,当然还要先知道遥控发射数据的格式,然后就是一个相反的过程。

遥控器发射的信号由一串01的二进制代码组成。不同的芯片对01的编码有所不同。通常有曼彻斯特编码和脉冲宽度编码。HS622101采用PWM方法编码,即脉冲宽度调制,00.56ms低电平和0.565ms高电平组合而成,脉冲宽度为1125ms1056ms低电平和1.69ms高电平组合而成。脉冲宽度为225ms。在编写解码程序时,通过判断脉冲的宽度,即可得到01

HS6221以及同类的芯片的数据格式包括引导码(起始码),用户码(地址码),用户反码(地址反码),数据码,数据反码,编码总共32位,数据反码是数据码反相后的编码,用户反码原理一样,可以用来对数据的纠错。具体格式如下:点击看大图

当我们按下遥控器的按键时,遥控器将发出如上图的一串二进制代码,我们称它为一帧数据。根据各部分的功能。可将它们分为5部分,分别为引导码、用户码、用户反码、数据码、数据反码。遥控器发射代码时,均是低位在前。高位在后。由图中分析可以得到,引导码高电平为9ms,低电平为4.5ms,当接收到此码时,表示一帧数据的开始。FPGA可以准备接收下面的数据。地址码由8位二进制组成,共256种,图中用户反码主要是加强遥控器的可靠性,不同的设备可以拥有不同的地址码。因此,同种编码的遥控器只要设置地址码不同,也不会相互干扰。在同一个遥控器中,所有按键发出的地址码都是相同的。数据码为8位,可编码256种状态,代表实际所按下的键。数据反码是数据码的各位求反,通过比较数据码与数据反码,可判断接收到的数据是否正确。如果数据码与数据反码之间的关系不满足相反的关系,则本次遥控接收有误,数据应丢弃。在同一个遥控器上。所有按键的数据码均不相同。

上面对工作原理粗略的介绍了一下,虽然只停留于理论层面,但这个原理可是放于四海皆准,经过本人实验,无论是单片机还是ACTELALTERAFPGA都是十分适用。下面给出是程序代码:

//**************************IR_CTRL.V*****************************************************

//模块名称:IR_CTRL.V

//功能描述:红外接收模块

//适用范围:HS6221,HS6222,CS6121,包含引导码,地址码,地址反码,数据码,数据反码

//

//版权声明:

//    1)本代码属个人知识产权,保留最终解析权。

//    2)本代码仅供交流学习,未经本人同意不能用于其它用途。

//  

//_______________________________________________________________________________

//

// Created by:                    YI CHENG

// QQ:                                506009199

// Email:                             fsyicheng@21cn.com

// Created date:                  2008-10-29

// Version:                          1.1

//********************************************************************************

module IR_CTRL(clk,IR,OUTDATA,led);

input clk;             //系统时钟

input IR;              //红外接收

output OUTDATA;        //beel

output [7:0]led;       //指示LED

//reg OUTDATA;

assign OUTDATA="IR";    //beel

reg led1;

reg led2;

reg led3;

reg [7:0]led;

//--------------------------------------------------------------------

reg [14:0]divcnt;

reg divclk;

reg [2:0]state;

reg [6:0]cnt;                                   

reg [31:0]datatemp;                               //数据寄存器

reg [4:0]bitcnt;                                  //位计算器

reg ok_flag;                                      //接收完成

 

//----------------------------------------------------------------------

parameter                 guide_down=3'b000,      //引导码

                          guide_up=3'b001,

                          num_down=3'b010,               //数据码接收

                          num_up=3'b011,

                          key=3'b101,

                          num_judge=3'b100;               //01判断状态机

                         

 

//-----------------------------------------------------------------------------

always@(posedge clk)                //0.125ms

 begin

   if(divcnt==15'd3000)              //50MHz       3125

     begin                                      //48MHz       3000

         divclk=~divclk;

         divcnt=0;

     end

   else

     begin

         divcnt=divcnt+1'b1;

     end

 end

//-------------------------------------------------------------------------------

 

always @(posedge divclk)

 begin

    case(state)

    guide_down:

      begin

        if(IR==0)

           begin

             cnt<=cnt+1'b1;

             ok_flag<=0;

           end

        if(IR==1)