论坛» 嵌入式开发» FPGA

求教高手:

菜鸟
2007-12-25 22:25 1楼

我弄得一个计数器,是求一个脉冲信号的频率,我想在一定时间内计数脉冲的上升沿个数,求得频率。时钟信号4MHZ,DDLIN为输入脉冲信号。用的CPLD EPM7128STC100-10. 可为什么在地址“203”和“204”处,总是输出00呢?希望高手赐教:
count[15..0] : dff ;
countstate[1..0]: dff ;
countb_ena : NODE ;
operate_status : NODE ;
CASE SA[9..0] IS
WHEN H"203" =>
FOR I IN 0 TO 7 GENERATE
OUTBUF[I]=count[I];
END GENERATE;
WHEN H"204" =>
FOR I IN 0 TO 7 GENERATE
OUTBUF[I]=count[I+8];
END GENERATE;
WHEN OTHERS =>
FOR I IN 0 TO 7 GENERATE
OUTBUF[I]=OUTBUF[I];
END GENERATE;
END CASE;

FOR I IN 0 TO 7 GENERATE
SD[I]=TRI(OUTBUF[I],(SA[9..4]==H"20") & !SIOR);
END GENERATE;

(,CLK_1M,,) = freqdiv(GND,CLK, VCC);
(,,,CLK_250K) = freqdiv(GND,CLK, VCC);
(,,,CLK_15K) = freqdiv(GND,CLK_250K, VCC);
(,,,CLK_1K) = freqdiv(GND,CLK_15K, VCC);
(,,,CLK_16MS) = freqdiv(GND,CLK_1K, VCC);
countstate[].clk = CLK_16MS;
countstate[].CLRN = ((SA[9..0]==H"203")#(SA[9..0]==H"204")&!SIOW&!AEN);
count[].clk = DDLIN;
count[].CLRN = ((SA[9..0]==H"203")#(SA[9..0]==H"204")&!SIOW&!AEN);
--状态转移表
TABLE
countstate[].q => countstate[].d , operate_status ;
B"00" => B"01" , 0 ;
B"01" => B"11" , 0 ;
B"11" => B"10" , 0 ;
B"10" => B"10" , 0 ;
END TABLE;
--状态转移表
--计数器状态控制
CASE countstate[] IS
WHEN B"00" =>
countb_ena = GND;
WHEN B"01" =>
countb_ena = GND;
WHEN B"11" =>
countb_ena = VCC;
WHEN B"10" =>
countb_ena = GND;
END CASE;
--计数器状态控制
--计数器开始结束控制
IF countb_ena THEN
count[].d = count[].q + 1;
ELSE
count[].d = count[].q;
END IF;
---计数器开始结束控制
END;

工程师
2007-12-29 16:27 2楼
防真过还是实际跑的时候有错误!??
菜鸟
2007-12-30 22:08 3楼

叮叮当当,谢谢你了,是我猪头了,少打了一组括号……逻辑的问题。现在解决了

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]