在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: crst

请帮我看看这程序有什么错?

[复制链接]
 楼主| 发表于 2004-11-10 19:02:50 | 显示全部楼层

请帮我看看这程序有什么错?

“风在起”说的太对了,和我原来的思路一模一样,我就是不知道为什么不对,今天翻了一下书,感觉用状态图的方法一定可以,因为这个应该是时序电路,我都忘记得差不多了,只是我觉得我个逻辑比较简单,并且我觉得自己开始的思路也对,可能是我说的不太清楚,嘴笨,看了“风再起“的回帖,就像说到心坎上了,呵呵,我就是这个意思,那麻烦你帮我看看那样能不能实现的,我的实现方法上有什么致命错误,我得补习补习了,非常感谢了
发表于 2004-11-10 22:01:25 | 显示全部楼层

请帮我看看这程序有什么错?

实际上我开始就明白状态不用8个那么多,但我觉得楼主应该是个初学者,重要的是流程和思考习惯,我想这个题目本身的意图也只是练习吧,所以我不想提示,让他自己试试。没想到给各位高手三下两下说破了:)
发表于 2004-11-10 22:26:24 | 显示全部楼层

请帮我看看这程序有什么错?

下面是我按你的要求和思路写的代码,我上面的说的“该信号”就是下面的ledout[0],全局复位后为无效,按“开始抢答”按键(就是keyin[0])后有效,在有人抢答后又无效,在ledout[0]信号有效时,采样“抢答按键”信号(keyin[7:1]),这里加入了优先级的处理,keyin[1]优先级最高,keyin[7]最低,可以用if else重叠,也可以写成casex语句。
我认为,如果还要改进,可以从这几方面下手:1、对抢答按键信号是否加入消抖处理;2、抢答就绪后加入看门狗逻辑,如果在规定的时间内无人抢答,则此次抢答作废,待下一次“开始抢答”按键复位后重新来过。
module  KEYIN(rst, clk, keyin, ledout);
input              rst;     //全局异步复位信号,高电平有效
input              clk;
input       [7:0]  keyin;   //keyin[0]用来复位,其余7个为抢答按键
output  reg [7:0]  ledout;  //ledout[0]亮表示抢答就绪,其余7个分别对应7个抢答按键
always@(posedge clk or posedge rst) begin
    if(rst)
        ledout <= 8'b0;
    else begin
        if(keyin[0]) begin
            ledout[0] <= 1'b1;
            ledout[7:1] <= 7'b0;
        end
        else begin
            if(|keyin[7:1])
                ledout[0] <= 1'b0;
            if(ledout[0]) begin
                if(keyin[1])        ledout[7:1] <= 7'b000_0001;
                else if(keyin[2])   ledout[7:1] <= 7'b000_0010;
                else if(keyin[3])   ledout[7:1] <= 7'b000_0100;
                else if(keyin[4])   ledout[7:1] <= 7'b000_1000;
                else if(keyin[5])   ledout[7:1] <= 7'b001_0000;
                else if(keyin[6])   ledout[7:1] <= 7'b010_0000;
                else if(keyin[7])   ledout[7:1] <= 7'b100_0000;
                else                ledout[7:1] <= 7'b0;
            end
        end
    end
end
endmodule
发表于 2004-11-11 16:10:01 | 显示全部楼层

请帮我看看这程序有什么错?

俺要求坐2号位,因为俺的优先级最高,呵呵,你们抢不过俺的哦。
提个问题:怎样解决公平性?通过讨论这个问题可以加深你的电路理解。
发表于 2004-11-11 20:23:46 | 显示全部楼层

请帮我看看这程序有什么错?

parallel_case
发表于 2004-11-11 21:50:56 | 显示全部楼层

请帮我看看这程序有什么错?

case的目的只是为解决优先级电路的延迟过大问题;对于本问题会出现电路功能出错.
继续讨论...
发表于 2004-11-11 22:14:05 | 显示全部楼层

请帮我看看这程序有什么错?

越讨论越复杂有趣了,if ,else if, else对应的是带优先级的多路器,用并行case语句不错。但老扁提的很对,如何应对小概率的在同一时钟周期内同时按键问题?提高主频可以降低这个概率,但是不能根本解决。要公平只能靠上帝掷色子了,加个真随机源输入。不过你还得分别处理同时2~7个键按下的情形。
发表于 2004-11-11 22:23:07 | 显示全部楼层

请帮我看看这程序有什么错?

我是说用 directive:  // synopsys parallel_case
它综合出来的电路是没有优先级的!!就是说一个周期内两个同时有效就两个灯都亮。这样应该是绝对公平的。
发表于 2004-11-11 22:43:43 | 显示全部楼层

请帮我看看这程序有什么错?

brave确实是解决了公平性问题,但却不满足抢答器的要求:就是只能有一个亮;所以我才说功能会出错;因为同时多个亮的话主持人会傻掉的,哈哈.
确实如iamchine所言,增加时间分辨率是一个解决的途径.但最终要解决公平性的话,可能真的得掷色子.加个掷色子电路吧,呵呵,越来越复杂.
所以俺的本意是通过讨论这个问题,让初学者深刻理解电路的实现原理
发表于 2004-11-11 23:25:07 | 显示全部楼层

请帮我看看这程序有什么错?

非也非也,竞赛项目的公平,不能引入运气因素,比如两个运动员并列第一或者打平,在奖杯只有一个的情况下总不能猜硬币决定归属吧?如果所有指标都考察完了,就加赛,比如足球什么的。所以俺觉得抢答器的任务就是作为底层计量工具,如实反映按键情况就行了,公平性由上层协议保证,重新按一次好了。

以上纯属发贴赚钱,大家表骂俺^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 06:52 , Processed in 0.021852 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表