原创 FPGA与单片机简单的并口通讯

2009-3-10 20:55 6226 6 12 分类: FPGA/CPLD
单片机和FPGA通讯
【1】可以使用单片机的总线结构来做通讯,这个例子是基于51单片机的https://static.assets-stash.eet-china.com/album/old-resources/2008/12/6/2eb5e12e-5e75-49d0-919c-3c4ea541b4a5.rar


【2】可以独立的设计(下面是我自己曾经用过的代码)
有两种方式:
    一种是单片机提供了数据线接口和地址线接口以及时钟线和使能线,这样在时钟的上升沿数据写入指定的地址。但是这种方式占用较多的数据线。
   一种是单片机提供数据线和时钟线,地址可以由内部的计数器根据时钟上升沿的数目产生,下面的代码就是按照这中思路来设计的
module parral_communicate(wr,cs,data,lock_up,
                          frequence_word,wave_select,clk_select,
                                  compare_word);
input  wr;
input  cs;
input  [7:0]data;
input  lock_up;
output [31:0]frequence_word;//
output [2:0] wave_select;   //
output [3:0] clk_select;    //
output [7:0] compare_word;  //输出信号

reg [31:0]frequence_word;
reg [2:0] wave_select;
reg [3:0] clk_select;
reg [7:0] compare_word;
   
reg [7:0]temp_reg[5:0];
reg [3:0]counter;

//ganerate regster addres  
always@(negedge wr or posedge cs)
begin
   if(cs)
     counter<=0;
   else if(!cs)
     counter<=counter+1;
end

//write data to regster 
always@(posedge wr)
begin
  if(!cs)
     temp_reg[counter]<=data;
end
//sent data to inter regster,and come into effect with the rising edge of lock_up
always@(posedge lock_up)
begin
  frequence_word<={temp_reg[3],temp_reg[2],temp_reg[1],temp_reg[0]};
  wave_select<=temp_reg[4][2:0];
  clk_select <=temp_reg[4][7:4];
  compare_word<=temp_reg[5];
end
endmodule


【3】上面所写的用法都很简单,仅仅是为了传输数据而已,根深一点的可以去使用标准的通讯时序
 



PARTNER CONTENT

文章评论6条评论)

登录后参与讨论

zhangshaobing517_935512703 2009-8-27 20:09

可以不用移位寄存器。。。直接开辟32位的数据寄存器,我还用了地址线,更稳定些。。可以参考 http://blog.ednchina.com/opencv2008/246124/message.aspx

用户1477991 2009-8-27 12:07

您好,我也是采用独立的方式,进行FPGA和单片机之间的通信,FPGA方面的程序思想是判断单片机的一个引脚是否有上升沿,如果有上升沿的话,就把8为数据读进来,进行移位寄存,最后读到32位数据。。。可是实际中却始终做不好,麻烦您能不能指点一下。。。我已经做了两天了。。。谢谢~

tengjingshu_112148725 2009-3-14 18:39

这几种方法都用过:)

zhangshaobing517_935512703 2009-3-12 17:47

没兴趣

用户536736 2009-3-12 16:54

非常感谢,能把上面的verilog语言写的程序改成VHDL语言的程序吗?本人初学,想请教一下,谢谢

用户1532875 2008-12-7 11:44

不错,如果加入应用案例可能更容易使人明白.支持
相关推荐阅读
zhangshaobing517_935512703 2011-03-21 01:28
KC24RT-300调试笔记
项目中需要使用LED驱动器,主要是为了让一串LED发出的光照一致,所以在试验中采用LED串联的方式比较好点,LED并联容易导致LED发光的 不均匀以及寿命减少。我在项目中采用金升阳公司的KC24RT-...
zhangshaobing517_935512703 2010-11-19 14:53
线程中CreateEvent和SetEvent及WaitForSingleObj
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面.CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象.EVENT有两种状态:发信...
zhangshaobing517_935512703 2010-11-15 13:29
VS2008 BEGIN
Visual Studio 2008环境与VC6.0的环境存在着比较大的区别,下面就一些小小的区别在这里做一些探讨,欢迎指教!1、如果是调试控制台程序,很多时候点击“启动调试”后是一闪而过,此时可有两...
zhangshaobing517_935512703 2010-11-01 20:38
使用MFC的数组类
 MFC的数组类支持的数组类似于C++中的常规数组,可以存放任何数据类型。C++的常规数组在使用前必须将其定义成能够容纳所有可能需要的元素,而MFC数组类创建的对象可以根据需要动态地增大或减小,数组的...
zhangshaobing517_935512703 2010-09-07 13:14
循环
 循环设计的注意的事情:(1)双重循环的跳出问题,break只挑出所在的循环,如果使用双层FOR循环,单个BREAK就不可能跳出所有的双层(2)在迭代的时候,注意起始和终止的条件,尤其是终止问题(3)...
zhangshaobing517_935512703 2010-09-02 01:09
图像处理改进
1.特征点提取的算法  标志点的提取算法对结果的影响虽然没有经过试验或者计算的推算,每1个pix的偏差对结果的影响有多大,但是不可避免的,要想获得高精度的  测量结果,高精度的提取对结果的影响还是很大...
EE直播间
更多
我要评论
6
6
关闭 站长推荐上一条 /1 下一条