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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3703|回复: 0

用vHDL写了出租车计价器想转成Verilog语言

[复制链接]
发表于 2010-6-24 14:27:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 北边西西 于 2010-6-24 14:31 编辑

我用转换工具转不了Verilog,下面是程序


输入:clk_240,系统时钟,频率为240Hz;


Start
,启动信号,当start=1时,汽车启动,开始计价; start=0时,清零;



Stop
,暂时计时信号,当stop-1时,中途暂停,开始计时;stop=0时,再次出发;



Fin
,汽车车速脉冲信号,是一个与随着车速变化而变化的脉冲信号。

输出:cha2cha1cha0,分别为价钱的十位,个位和角位;


Km1
km0,分别为行驶公里数的十位,个位;



Min0
,暂时分钟数输出。

接口部分源程序如下:
port ( clk_240:in std_logic;
--
频率为240Hz的时钟                        

start :in std_logic;
--
计价使能信号

stop:in std_logic;
--
等待信号

fin:in std_logic;
--
公里脉冲信号

cha2,cha1,cha0 :  out std_logic_vector(3 downto 0);
--
费用数据

km1,km0 :  out std_logic_vector(3 downto 0);
--
公里数据            

min0: out std_logic_vector(3 downto 0));

--
等待时间   
计价部分原理如下:
       起步价10元,3公里内10元,超出3公里部分,每公里1.6元,车暂停时,2分钟内不加价,超出2分钟部分,每分钟2.5;
计费部分源程序如下:
feipin:process(clk_240,start)
begin

if clk_240'event and clk_240='1' then


if start='0' then q_15<=0;q_16<=0;f_15<='0';f_16<='0';f_1<='0';f<='0';


else


if q_15=15 then q_15<=0;f_15<='1';
--
IF语句得到频率为15Hz的信号

else q_15<=q_15+1;f_15<='0';


end if;


if q_16=14 then q_16<=0;f_16<='1';
--
IF语句得到频率为16Hz的信号

else q_16<=q_16+1;f_16<='0';


end if;



if q_1=239 then q_1<=0;f_1<='1';
--
IF语句得到频率为1Hz的信号

else q_1<=q_1+1;f_1<='0';


end if;


if en1='1' then f<=f_15;
--
IF语句得到计费脉冲f

elsif en0='1' then f<=f_16;


else f<='0';


end if;


end if;


end if;

end process;

process(f_1)
begin

if f_1'event and f_1='1' then


if start='0' then

w<=0;en1<='0';en0<='0';m1<="000";m0<="0000";k1<="0000";k0<="0000";

elsif stop='1' then


if w=59 then w<=0;
--
IF语句完成等待计时

if m0="1001" then m0<="0000";
--
IF语句完成分计数

if m1<="101" then m1<="000";


else m1<=m1+1;


end if;


else m0<=m0+1;


end if;


if m1&m0>"0000001"then en1<='1';
--
IF语句得到en1使能信号

else en1<='0';


end if;


else w<=w+1;en1<='0';


end if;


elsif fin='1' then


if k0="1001" then k0<="0000";
--
IF语句完成公里脉冲计数

if k1="1001" then k1<="0000";


else k1<=k1+1;


end if;


else k0<=k0+1;


end if;


if k1&k0>"00000010" then en0<='1';
--
IF语句得到en0使能信号

else en0<='0';


end if;



else en1<='0';en0<='0';


end if;

cha3<=c3;cha2<=c2;cha1<=c1;cha0<=c0;
--
费用数据输出
km1<=k1;km0<=k0;min1<='0'&m1;min0<=m0;
--
公里数据、分钟数据输出

end if;

end process;

process(f,start)
begin

if start='0' then c3<="0000";c2<="0001";c1<="0000";c0<="0000";


elsif f'event and f='1' then


if c0="1001" then c0<="0000";
--
IF语句完成对费用的计数

if c1="1001" then c1<="0000";


if c2="1001" then c2<="0000";


if c3<="1001" then c3<="0000";



else c3<=c3+1;


end if;


else c2<=c2+1;


end if;


else c1<=c1+1;


end if;


else c0<=c0+1;


end if;


end if;

end process;
end behav;

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-9-27 09:29 , Processed in 0.014136 second(s), 8 queries , Gzip On, Redis On.

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