搜索
bottom↓
回复: 14

qii, sopc, nios ii 10.1 IP核设计,LED验证死活不行,感觉很神奇

[复制链接]

出0入0汤圆

发表于 2011-3-1 08:09:22 | 显示全部楼层 |阅读模式
学sopc也有个很长一段时间,最近第一次自己设计IP核。

参照了艾米的自定义IP核:SRAM,12864的例子,以及黑金的PWM的例子,同时看了两本书,以及《Avalon-MM Interface Specialtion》,最后按部就班设计,为了验证,先从简单的开始,可是sram好像可以,lcd1602和led 都不行,在此处我先讲解我设计led的流程:



(1)当然是led ip verilog的代码

/********************************************************************
*    Module Name           :   Crazy_LED
*    Author                :   Crazy Bingo
*    Device                :    EP2C8Q208C8  
*    Version               :   Quartus II 10.1
*    Date                  :   2011-2-24
*    Description           :   
*********************************************************************/
module Crazy_LED
(
    //Avalon Clock
    input            csi_clk,
    input            csi_rst_n,
    //Avalon-MM
    input    [1:0]    avs_address,        //multiple of 4
    input            avs_chipselect,
//    input    [1:0]    avs_byteenable_n,    //1,2,4,8,16,54,128
    input            avs_write,
    input    [31:0]    avs_writedata,        //32bit cpu
//    input            avs_read,
//    output    [31:0]    avs_readdata,        //32bit cpu
    //Avalon Conduit
    output    [1:0]    coe_data
);

reg    [1:0] coe_data_r;
always @(posedge csi_clk or negedge csi_rst_n)
begin
    if (!csi_rst_n)
        coe_data_r <= 0;
    else if (avs_chipselect && avs_write && (avs_address == 0))
        coe_data_r <= avs_writedata[1:0];
end
assign coe_data = coe_data_r;

endmodule



(2)在sopc中加入component

(原文件名:1.png)


(原文件名:2.png)


(原文件名:3.png)


(原文件名:4.png)


(原文件名:5.png)

2)加入led ip,generate

(原文件名:6.png)


(原文件名:7.png)


(原文件名:8.png)

(顺便提下,10.1有这两个警告,有些人也碰到了,但是好像不用管,我试过pio-led没问难题的)



(3)qii top module,分配引脚,编译,ok(警告应该没事,不用理会)

(原文件名:9.png)


(原文件名:10.png)


(4)新建nios2工程,涉及代码


(原文件名:11.png)



(5)下载pof后,run hardware,


printf运行了,但是led (2位)始终没反应,也没闪烁之类的,死了

(原文件名:12.png)

各位前辈:
(1)address 信号可不可以直接不要  默认为0 ?
(2)是不是我在nios2 的管脚映射错了?
(3)这到底是为什么?????????????????

当然我确定硬件是木有问题的
我实在不知道哪里不行了,郁闷了n久n久,吃不好睡不香,早上6:30 就起了,这个世界让我好崩溃,有谁知道,给点指点,谢谢了

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-3-1 09:21:51 | 显示全部楼层
不知道是不是
#define LED_DATA_ADDR LED_BASE | (1<<31)
#define LED_DATA *(unsigned long int *) (LED_DATA_ADDR)

然后后面LED_DATA = LED_DATA +1 ;死活不行  


但是如果直接IOWR(LED_DATA_BASE,0,1);
就可以了

然后 address 我测试是没有就不行 有才能亮

出0入0汤圆

发表于 2011-3-1 10:05:46 | 显示全部楼层
#define LED_DATA_ADDR LED_BASE | (1<<31)

为什么要去做 | (1<<31)呢?
直接#define LED_DATA_ADDR LED_BASE
就行了吧!

出215入118汤圆

发表于 2011-3-1 11:18:31 | 显示全部楼层
#define LED_DATA *(volatile unsigned long int *) (LED_DATA_ADDR)
试试!

出0入0汤圆

发表于 2011-3-1 11:36:46 | 显示全部楼层
不是很懂,
只是好奇不用IOWR()
怎么向IP发送数据

出0入0汤圆

 楼主| 发表于 2011-3-1 14:29:09 | 显示全部楼层
回复【2楼】oceanx
-----------------------------------------------------------------------

回复【3楼】snowy
-----------------------------------------------------------------------

回复【4楼】syuanwang 昙花公公
-----------------------------------------------------------------------



不行的,因为是nios ii fase,fast开辟了一段cache,所以nios2 写入有两种方法
(1)直接用API ,IOWR()
(2)就是#define LED_DATA *(unsigned long int *) (LED_DATA_ADDR LED_BASE | (1<<31)),然后LED_DATA = ?
详见我博客http://www.cnblogs.com/crazybingo/archive/2010/11/26/1889253.html

出0入0汤圆

 楼主| 发表于 2011-3-1 14:35:07 | 显示全部楼层
发现了郁闷的问题,搞得我哪哪都不舒服
地址映射定义完接口之后,进行操作,结果第一种不可以,第二种死活可以,

(1)不可以

(原文件名:这样 死活不行 LED 和我都死了.jpg)

(1)可以

(原文件名:这样写 很OK,流水灯OK.jpg)

怎么会那样

出0入0汤圆

发表于 2011-3-1 15:06:12 | 显示全部楼层
哦,从来没有用过fast的nios,呵呵。学习了,data cache的问题,必须要将地址最高位置1避免将数据写到cache

你的问题很简单啊

LED = LED + 1;
这句话需要先读LED1次,+1后再往LED里面写

而你的verilog 代码没有寄存器读操作嘛,加上读操作就可以了撒

出0入0汤圆

 楼主| 发表于 2011-3-2 08:31:28 | 显示全部楼层
回复【7楼】oceanx
-----------------------------------------------------------------------
懂了  你是说  
output         read;
output [31 : 0] readdata;

可是对有些器件而言,比方说1602,led,只要write就可以了啊 ,他们io又不是inout
read什么用,
我试试看吧

//read
reg        [1:0] avs_readdata_r;
always @(posedge csi_clk or negedge csi_rst_n)
begin
        if (!csi_rst_n)
                avs_readdata_r <= 0;
        else if (avs_chipselect && avs_read && (avs_address == 0))        //for steady state
                avs_readdata_r <= coe_data;
        else
                avs_readdata_r <= 0;
end
assign avs_readdata = avs_readdata_r;


还是没有用  不好意思。。。。。。

RTL如下:

(原文件名:RTL.png)


(原文件名:RTL2.png)



最后还是不行

出0入0汤圆

发表于 2011-3-2 21:24:29 | 显示全部楼层
最后1句
assign avs_readdata = {30{1'b0},avs_readdata_r};
不过看RTL好像也没什么问题。。。用signal Tap抓一下波形看看呢。。。

出0入0汤圆

发表于 2011-3-6 21:00:35 | 显示全部楼层
回复【楼主位】hanbin08041813 CrazyBingo
-----------------------------------------------------------------------

斌哥威武!

出0入0汤圆

 楼主| 发表于 2011-4-5 14:20:04 | 显示全部楼层
忘了说  早就搞定了

出0入0汤圆

发表于 2011-4-7 13:55:40 | 显示全部楼层
回复【11楼】hanbin08041813 CrazyBingo
-----------------------------------------------------------------------

是啥问题?

出0入0汤圆

 楼主| 发表于 2011-9-5 13:52:58 | 显示全部楼层
回复【12楼】TornadoYu
-----------------------------------------------------------------------

忘了 反正早就解决了

出0入0汤圆

发表于 2012-3-6 13:14:08 | 显示全部楼层
CrazyBingo  :)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 11:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表