flashman911 发表于 2009-10-17 15:11:48

状态机工作不正常问题,希望有人帮我看看

参考论坛上zkf0100007的FPGA控制DS18B20程序。http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1079713&bbs_page_no=1&bbs_id=1029
我直接复制,在quartus下编译通过,但是不能工作。
现先测试DS18B20复位和响应。
部分程序如下:
STATE_TRANSITION:process(STATE,clk1m)
begin
if rising_edge(clk1m) then
        case STATE is
            when RESET=>
                        --**********
                        LED2<='0';--用来指示是否工作在CMD_CC状态
                        --*********
            if (cnt>=0 and cnt<500) then
               dq<='0';
                            cnt<=cnt+1;
                                   STATE<=RESET;
                        elsif (cnt>=500 and cnt<510) then--复位和等待
                                dq<='Z';
                                cnt<=cnt+1;
                                STATE<=RESET;
                 elsif (cnt>=510 and cnt<750) then      --检测是否有响应
                                temp<=dq;
                                if(cnt=580) then
                                        temp<=dq;
                                        if(temp='1') then;--LED用来显示是否复位成功。如果复位成功,DS18B20应该反馈一个低电平
                                                LED<='0'
                                        else LED<='1';--复位成功,电量LED
                                        end if;
                                end if;
                            cnt<=cnt+1;
                            STATE<=RESET;
                                elsif (cnt>=750) then
                                  cnt<=0;
                                  STATE<=CMD_CC;

                                end if;
                when CMD_CC=>
                        write_temp<="11001100";
                        LED2<='1';
                        LED3<='0';
                        STATE<=CMD_CC;--让状态机在CMD_CC死循环,并点亮LED2
---------------------------
现在问题是,硬件测试如果将状态机在RESET死循环,则LED能点亮,即能检测到响应信号。可以,如果我状态机经历RESET、CMD_CC,并在CMD_CC死循环,则LED、LED2都不会点亮。请问这是为什么啊?

flashman911 发表于 2009-10-17 15:23:37

编译的时候程序提示:
Warning: Reduced register "write_temp" with stuck data_in port to stuck value GND
Warning: Reduced register "write_temp" with stuck data_in port to stuck value GND
Warning: Reduced register "write_temp" with stuck data_in port to stuck value GND
Warning: Reduced register "write_temp" with stuck data_in port to stuck value GND

其中,write_temp是用来输入传感器指令的。我将这行代码隐去后,就能正常点亮LED了。请问这是什么问题啊?
为什么这个reg write_temp会影响到我程序的执行呢?
页: [1]
查看完整版本: 状态机工作不正常问题,希望有人帮我看看