导航:首页 > 编程语言 > fpga计时器程序

fpga计时器程序

发布时间:2023-08-19 13:54:07

㈠ fpga verilog里一个模块的时钟有2种以上的选择 ,怎么实现

在always模块里用case语句吧,这样调理清晰,我给个例子,程序贴上来之后排版有点乱,你自己排一下版吧

always @(*)
begin
case(lte_switch)
2'h1 : begin // tx only
txnrx_txon = 1'b1;
enable_rxon = 1'b1;
paon = 1'b1;
lna_on = 1'b0;
rfsw = 1'b1;
end
2'h2 : begin // rx only
txnrx_txon = 1'b0;
enable_rxon = 1'b1;
paon = 1'b0;
lna_on = 1'b1;
rfsw = 1'b0;
end
2'h3 : begin
txnrx_txon = 1'b0;
enable_rxon = 1'b0;
paon = 1'b0;
lna_on = 1'b0;
rfsw = 1'b0;
end
default:begin // normal
txnrx_txon = T2K_GPIO14 ;
enable_rxon = T2K_GPIO0 ;
paon = T2K_GPIO15 ;
lna_on = ~paon ;
rfsw = T2K_GPIO14 ;
end
endcase
end

㈡ 基于FPGA技术的数字时钟万年历设计

【实验目的】:

设计一个24小时制数字钟,要求能显示时,分,秒,并且可以手动调整时和分

【试验中所用器材】:

开发环境MAX—PLUSII,ZY11EDA13BE 试验系统, VHDL 语言.

【设计原理】

数字钟的主体是计数器,它记录并显示接收到的秒脉冲个数,其中秒和分为模60计数器,小时是模24计数器,分别产生3位BCD码。BCD码经译码,驱动后接数码管显示电路。

秒模60计数器的进位作为分模60计数器的时钟,分模60计数器的进位作为模24计数器的时钟。

为了实现手动调整时间,在外部增加了setm(调整分),seth(调整时)按键,当这两个按键为低电平时,电路正常计时,当为高电平时,分别调整分,时。同时在外部还增加了一个清零按键clr.和消抖动电路。

【单元模块设计部分】

消抖动电路关键部分

signal key_in1,key_in2:std_logic:='0';

begin

process(clk,key_in)

begin

if clk'event and clk='1' then

key_in1<=key_in;key_in2<=key_in1;

if key_in='1' and key_in1='1' and key_in2='1' then key_out<='1';

else key_out<='0';

时序仿真图

模60计数器程序关键部分:

signal md_temp,mg_temp:std_logic_vector(3 downto 0);

begin

process(clk,clr)

begin

if clr='1' then

md_temp<="0000"; mg_temp<="0000";

elsif set='1' then

md_temp<=setl; mg_temp<=seth;

elsif clk'event and clk='1' then

if md_temp="1001" then

md_temp<="0000";mg_temp<=mg_temp+'1';

else md_temp<=md_temp+'1';

end if;

if md_temp="1001" and mg_temp="0101" then

md_temp<="0000";mg_temp<="0000";

秒时序仿真图

分时序仿真

分的清零和调整时间部分

模24计数器程序关键部分

signal hd_temp,hg_temp:std_logic_vector(3 downto 0);

begin

process(clk,clr,set,setl,seth)is

begin

if set='1' then hd_temp<=setl; hg_temp<=seth;

elsif clr='1' then hd_temp<="0000"; hg_temp<="0000";

elsif clk'event and clk='1' then

if hg_temp="0010" and hd_temp="0011" then

hd_temp<="0000"; hg_temp<="0000";

elsif hd_temp="1001" then

hg_temp<=hg_temp+'1' hd_temp<="0000";

else hd_temp<=hd_temp+'1';

end if;

end if;

end process ;

时时序仿真图

清零和调时

显示部分关键程序

process (sd,sg,md,mg,hd,hg)

begin

case sd is

when "0000" =>sl<="1111110";

when "0001" =>sl<="0110000";

when "0010" =>sl<="1101101";

when "0011" =>sl<="1111001";

when "0100" =>sl<="0110011";

when "0101" =>sl<="1011011";

when "0110" =>sl<="1011111";

when "0111" =>sl<="1110000";

when "1000" =>sl<="1111111";

when "1001" =>sl<="1111011";

when others =>sl<="0000000";

end case;

if clk_g'event and clk_g='1' then

if sel="101" then

sel<="000";

else sel<=sel+'1';

end if;

end if;

end process;

process(sel,sd,sl,sg,sh,md,ml,mg,mh,hd,hl,hg,hh)

begin

case sel is

when"000"=>led<=sl;

led_which<=sd;

when"001"=>led<=sh;

led_which<=sg;

when"010"=>led<=ml;

led_which<=md;

when"011"=>led<=mh;

led_which<=mg;

when"100"=>led<=hl;

led_which<=hd;

when"101"=>led<=hh;

led_which<=hg;

when others=>led<="0000000";

led_which<="0000";

end case;

仿真图

顶层文件关键程序

port(

clk,clk_g:in std_logic;-----clk_g是用在数码管显示里面的信号

clr: in std_logic;------clr=1时 清零

setm,seth:in std_logic;---------setm为1时调分,seth为1时调时

setd,setg:in std_logic_vector(3 downto 0);----调整时间的时候,setd调整的是低位setg调整高位

led:out std_logic_vector(6 downto 0);

sel_out: out std_logic_vector(2 downto 0);

led_which: out std_logic_vector(3 downto 0));---输出的是秒分时的哪一个

begin

u1:de_shake port map (clk=>clk,key_in=>clr,key_out=>clro);

u2:de_shake port map (clk=>clk,key_in=>setm,key_out=>setmo);

u3:de_shake port map (clk=>clk,key_in=>seth,key_out=>setho);

u4:s60 port map (clk=>clk,clr=>clro,sd=>sdl,sg=>sgh,fenmaichong=>fenmaichongo);

u5:m60 port map (clk=>fenmaichongo,clr=>clro,md=>mdl,mg=>mgh,xiaoshimaichong=>xiaoshimaichongo,setl=>setd,seth=>setg,set=>setmo);

u6:h24 port map (clk=>xiaoshimaichongo,clr=>clro,hd=>hdl,hg=>hgh,set=>setho,setl=>setd,seth=>setg);

u7:led_xs port map (clk_g=>clk_g,sd=>sdl,sg=>sgh,md=>mdl,mg=>mgh,hd=>hdl,hg=>hgh,led=>led,sel_out=>sel_out,led_which=>led_which);

㈢ 32MHZ的时钟,在FPGA中用Verilog语言编写一个5us的死区程序,请教各位大神有相似的例子能发我一份吗/

mole d_asyn(clk,clr,d,q); //模块输入输出口,共四个信号,每个都是1bit的
input clk,clr,d; //这些是作为输入
output q; //这些是作为输出
reg q; //q在作为寄存器类的输出,就是说可以用<= 箭头赋值(见下面)
always @(posedge clr) //posedge:上升沿。就是说在clr信号的上升沿的时候都会触发这个操作
begin //可以忽略,就是多条语句在一块的时候要用
q<=0; //清0
end
always @(necedge clk) //negedge:下降沿,你肯定拼错了 ,在clk下降沿的时候触发
begin
#10 q<=d; //延迟10个单位,这个在#timescale那里定义,这个只在仿真的时候有用,在器件上的时候不能这样做延迟
end
endmole

阅读全文

与fpga计时器程序相关的资料

热点内容
使用土地的有关证明文件包含哪些 浏览:493
数据标注哪里可以接 浏览:482
在家自学编程下什么学 浏览:705
最近很火的app软件是什么软件 浏览:862
ai文字工具 浏览:157
兰博玩游戏路径怎么选择正确文件 浏览:972
淘宝直通车恢复老版本 浏览:510
播放草莓的图片我都文件 浏览:55
微信大文件打不开 浏览:767
家装合同准备哪些文件 浏览:296
应用bat合并excel文件 浏览:984
迅雷影音文件夹 浏览:109
makefile的文件路径 浏览:392
计算机程序文件名扩展名为 浏览:982
网络游戏推广策划案 浏览:609
替换所有文件内容的代码 浏览:960
不是常用数据模型有哪些 浏览:426
aspcms版本号 浏览:835
安卓怎么用数据流量下载软件 浏览:553
大众手动空调数据流通道号是多少 浏览:303

友情链接