文档库 最新最全的文档下载
当前位置:文档库 › FPGA闹钟代码Verilog

FPGA闹钟代码Verilog

FPGA闹钟代码Verilog
FPGA闹钟代码Verilog

闹表使用说明

一、闹表基本功能

è 可设置时间

è 可设置闹铃

二、功能与接口

è 可设置闹表功能与接口

è 平时时、分、秒依次自加一跳变;

è 设置时间时,可独立控制小时或者分钟自加一跳变;

è 设置闹铃时,可独立控制小时或者分钟自加一跳变;

è 需要有时钟驱动;

è 需要有LED显示;

è 需要闹表开关、设置小时开关、设置分钟开关;

三、功能及控制键(输入)

è SW17为SET_TIME 用于设置时间(上端设置);

è SW16为ALARM 用于设置闹表时间(上端设置);

è SW0为TOGGLE_SWITCH 闹表开关(上端打开);

è KEY1为HRS 设置小时(按一次加一个值);

è KEY0为MIN设置分钟(按一次加一个值);

è 时钟(CLK_50)接入50M时钟;

四、功能及控制键(输出)

è DISP1显示小时,连接到HEX3、HEX2;

è DISP2显示分钟,连接到HEX1、HEX0;

è AM_PM_DISPLAY显示上/下午,连接到LEDG8;

è SPEAKER闹铃,连接到LEDR17;

五、解决方案

1. 总体模块划分

2. 各模块实现

1) 计数模块(显示模块)

DE-2提供了50MHZ钟,本实验需要的1s加1的跳变,所以需要将时钟进行分频为1HZ的时钟来达到计数的要求。

代码清单:

always@(posedge CLK_50)

begin

if(count<25000000)

begin

count<=count+1'b1;

end

else

begin

count<=1'b0;

clk_odd<=~clk_odd;

end

end

完成时钟分频以后,将得到的1HZ的时钟输入到

计数模块,实现上述要求。

代码清单:

always@(posedgeclk_odd)

begin

if(!RESET) //if reset,clear all the data

begin

second<=0;

minute<=0;

hour<=0;

end

else if(RESET)//if there is no reset

begin

if(!SET_TIME)//if you do not set time

begin

if(second>=0 && second<59)

begin

second<=second+1;

end

else if(second==59 && minute<59) //second

begin

minute<=minute+1;

second<=0;

end

else if(minute==59 && second==59 && hour<23)//minute

begin

hour<=hour+1;

minute<=0;

end

else if(hour==23 && minute==59 && second==59)//hour

hour<=0;

end

else if(SET_TIME)//when you set time,the data can be sent to 'hour' and 'minute'

begin

hour <= hour_set_time;

minute <= minute_set_time;

end

end

if(!ALARM)

begin

HEX5<=Seg(high_hur);

HEX4<=Seg(low_hur);

HEX3<=Seg(high_min);

HEX2<=Seg(low_min);

HEX1<=Seg(high_sec);

HEX0<=Seg(low_sec);

end

else if(ALARM)

begin

HEX5<=Seg(alarm_high_hur);

HEX4<=Seg(alarm_low_hur);

HEX3<=Seg(alarm_high_min);

HEX2<=Seg(alarm_low_min);

HEX1<=7'b11111_111;

HEX0<=7'b11111_111;

end

end

本模块问题:起初对模块划分认识不清即下手写程序,导致显示模块被集成到了计数模块。

2) 校对模块

原理:在计数模块中通过将SW17键推到上部来使能校对功能。通过对KEY1键的操作(检测该键的上升沿)来达到调小时的功能;通过对KEY0键的操作(检测该键的上升沿)来达到调分钟的功能。

通过上述操作将在时钟的激励下将设定的时间数据传入计数模块,达到设置时间的目的。代码清单:

module set_time(SET_TIME,HRS,MIN,minute,hour);

input SET_TIME; //used to set the clock's //time,the clock can be setted //when the SW turned on

input HRS; //the key to chang hour

input MIN; //the key to chang minute

output[7:0] minute,hour;

reg[7:0] minute,hour;

always@(posedge HRS) //when SET_TIME =1, //press HRS to count the //hour

begin

if(SET_TIME)

begin

if(hour>=0 && hour<23)

hour = hour + 1;

else

hour =0;

end

end

always@(posedge MIN) // when SET_TIME =1, //press HRS to count //the minute

begin

if(SET_TIME)

begin

if(minute>=0 && minute<59)

minute = minute + 1;

else

minute =0;

end

end

endmodule

3) 闹钟模块

闹钟模块的设计类似校对模块。不同之处是在于设计闹钟模块的时候通过将SW16推到上部来达到是能的目的。

然后将得到的数据与计数模块的时间进行比较,如果相等,并且闹表使用SW0被推到了上部,即可以实现闹表功能。

代码清单:

module set_alarm(HRS,MIN,ALARM,minute,hour);

input HRS;

input MIN;

input ALARM;//once ALARM is swithedon,the alarm time can be setted

output[7:0] hour;

output[7:0] minute;

reg[7:0] hour;

reg[7:0] minute;

always@(posedge HRS)

begin

if(ALARM)

begin

if(hour>=0 && hour<23)

hour = hour + 1;

else

hour =0;

end

end

always@(posedge MIN)

begin

if(ALARM)

begin

if(minute>=0 && minute<59)

minute = minute + 1;

else

minute =0;

end

end

endmodule

VerilogHDL经典程序非常适合新手

一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0; 2'b01:y=i1; 2'b10:y=i2; 2'b11:y=i3; default:y=0; 一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0;

基于FPGA的Verilog HDL数字钟设计 -

基于FPGA的Verilog HDL数字钟设计 专业班级姓名学号 一、实验目的 1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程; 2.熟悉一种EDA软件使用; 3.掌握Verilog设计方法; 4.掌握分模块分层次的设计方法; 5.用Verilog完成一个多功能数字钟设计; 6.学会FPGA的仿真。 二、实验要求 ?功能要求: 利用实验板设计实现一个能显示时分秒的多功能电子钟,基本功能: 1)准确计时,以数字形式显示时、分、秒,可通过按键选择当前显示时间范围模式; 2)计时时间范围00:00:00-23:59:59 3)可实现校正时间功能; 4)可通过实现时钟复位功能:00:00:00 扩展功能: 5)定时报:时间自定(不要求改变),闹1分钟(1kHz)---利用板上LED或外接电路实现。 6)仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)] ---用板上LED或外接 7)报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---用板上LED或外接 8)手动输入校时; 9)手动输入定时闹钟; 10)万年历; 11)其他扩展功能; ?设计步骤与要求: 1)计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。 2)在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电路系 统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。 3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快 得出仿真结果)。 4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit文件。 5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。

74LS138Verilog源码

`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2020/02/28 13:40:03 // Design Name: // Module Name: _74ls138 // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module _74ls138(nE1,nE2,E3,B,nY); input nE1,nE2,E3; input [2:0]B; output[7:0]nY; reg[7:0]nY; always@(nE1,nE2,E3,B) if(!nE1 && !nE2 && E3) begin case(B) 3'b000: nY = 8'b1111_1110; 3'b001: nY = 8'b1111_1101; 3'b010: nY = 8'b1111_1011; 3'b011: nY = 8'b1111_0111; 3'b100: nY = 8'b1110_1111; 3'b101: nY = 8'b1101_1111; 3'b110: nY = 8'b1011_1111; 3'b111: nY = 8'b0111_1111; default:nY = 8'b1111_1111; endcase end

(完整版)Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文

五层楼电梯运行控制逻辑设计 摘要:电梯是高层建筑不可缺少的运输工具,用于垂直运送乘客和货物,传统的电梯控制系统主要采用继电器,接触器进行控制,其缺点是触点多,故障率高、可靠性差、维修工作量大等,本设计根据电梯自动控制的要求利用Verilog语言编写并完成系统设计,在利用软件仿真之后,下载到了FPGA上进行硬件仿真。FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了之前的可编程器件门电路数有限及速度上的缺点。 关键词:电梯控制FPGA Verilog软件设计硬件设计 在当今社会,随着城市建设的不断发展,高层建筑的不断增多,电梯作为高层建筑中垂直运行的交通工具已与人们的日常生活密不可分。目前电梯控制系统主要有三种控制方式:继电路控制系统(早期安装的电梯多位继电器控制系统),FPGACPLD [1] 的控制系统、微机控制系统。继电器控制系统由于故障率高、可靠性差、控制方式不灵活以及消耗功率大等缺点,目前已逐渐被淘汰,而微机控制系统虽在智能控制方面有较强的功能,但也存在抗扰性差,系统设计复杂,一般维修人员难以掌握其维修技术等缺陷。而FPGACPLD控制系统由于运行可靠性高,使用维修方便,抗干扰性强,设计和调试周期较短等优点 [2] ,倍受人们重视等优点,已经成为目前在电梯控制系统中使用最多的控制方式,目前也广泛用于传

统继电器控制系统的技术改造。 随着现代化城市的高度发展,每天都有大量人流及物流需要输送,因此在实际工程应用中电梯的性能指标相当重要,主要体现在:可靠性,安全性,便捷快速性。电梯的可靠性非常重要,直接或间接的影响着人们的生产,生活,而电梯的故障主要表现在电力拖动控制系统中,因此要提高可靠性也要从电力拖动控制系统入手。 本次设计尝试用Verilog实现电梯控制器部分,进行了多层次的电梯控制,也进行了软件及硬件上的仿真验证,时序分析以保证设计的正确。在设计中先用软件进行模拟仿真,然后又下载到FPGA开发板上进行硬件仿真,以确保设计的正确性。 1电梯的设计分析 1.1 系统的需求分析及系统描述 设计一个电梯运行控器,该电梯有5层楼,设计的电梯调度算法满足提高服务质量、降低运行成本的原则;电梯的内部有一个控制面板,它负责按下请求到的楼层,并且显示当前尚未完成的目的地请求,当到达该楼层以后自动撤销本楼层的请求,即将面板灯熄灭;除1层和5层分别只有上和下按钮外,其余每个楼层(电梯门口旁)的召唤面板都有两个按钮,分别指示上楼和下楼请求。当按下后,对应按钮灯亮。如果电梯已经到达该楼层,按钮灯熄灭;电梯的外部面板会显示电梯当前所在的楼层,及上行还是下行(暂停显示刚才运行时的状态);电梯向一个方向运行时,只对本方向前方的请求进行应答,直到本方向前方无请求时,才对反方向的请求进行应答。当前内部控制面板上有的请求,只要经过所在楼层均会立即响应.

全数字锁相环的verilog源代码讲解

支持论坛发展帖出全数字锁相环的verilog源代码,仿真已通过 module dpll(reset,clk,signal_in,signal_out,syn; parameter para_K=4; parameter para_N=16; input reset; input clk; input signal_in; output signal_out; output syn; reg signal_out; reg dpout; reg delclk; reg addclk; reg add_del_clkout; reg [7:0]up_down_cnt; reg [2:0]cnt8; reg [8:0]cnt_N; reg syn; reg dpout_delay; reg [8:0]cnt_dpout_high; reg [8:0]cnt_dpout_low; /******phase detector*****/ always@(signal_in or signal_out begin dpout<=signal_in^signal_out; end /******synchronization establish detector*****/ always@(posedge clk or negedge reset begin if(!reset dpout_delay<='b0; else dpout_delay<=dpout; end always@(posedge clk or negedge reset begin if(!reset begin cnt_dpout_high<='b0; cnt_dpout_low<='b0; end else if(dpout if(dpout_delay==0 cnt_dpout_high<='b0; else if(cnt_dpout_high==8'b11111111 cnt_dpout_high<='b0; else cnt_dpout_high<=cnt_dpout_high+1; else if(!dpout if(dpout_delay==1 cnt_dpout_low<='b0; else if(cnt_dpout_low==8'b11111111 cnt_dpout_low<='b0; else cnt_dpout_low<=cnt_dpout_low+1; end always@(posedge clk or negedge reset begin if(!reset syn<='b0; else if((dpout&&!dpout_delay||(!dpout&&dpout_delay if(cnt_dpout_high[8:0]-cnt_dpout_low[8:0]<=4||cnt_dpout_low[8:0]- cnt_dpout_high[8:0]<=4 syn<='b1; else syn<='b0; end /****up down couter with mod=K****/ always@(posedge clk or negedge reset begin if(!reset begin delclk<='b0; addclk<='b0; up_down_cnt<='b00000000; end else begin if(!dpout begin delclk<='b0; if(up_down_cnt==para_K-1 begin up_down_cnt<='b00000000; addclk<='b0; end else begin up_down_cnt<=up_down_cnt+1; addclk<='b0; end end else begin addclk<='b0; if(up_down_cnt=='b0 begin up_down_cnt<=para_K-1; delclk<='b0; end else if(up_down_cnt==1 begin delclk<='b1; up_down_cnt<=up_down_cnt-1; end else up_down_cnt<=up_down_cnt-1; end end end /******add and delete clk*****/ always@(posedge clk or negedge reset begin if(!reset begin cnt8<='b000; end else begin if(cnt8=='b111 begin cnt8<='b000; end else if(addclk&&!syn begin cnt8<=cnt8+2; end else if(delclk&&!syn

基于FPGA的verilog的电子密码锁设计

一、概述 1.1 电子密码锁的现状 随着我国对外开放的不断深入,高档建筑发展很快,高档密码锁具市场的前景乐观。我国密码锁具行业对密码锁具高新技术的投入正逐年增大,高档密码锁的市场需求也逐年增加。在安防工程中,锁具产品是关系到整个系统安全性的重要设备,所以锁具产品的优劣也关系了整个安防工程的质量和验收。 目前,市场上比较先进的智能电子密码锁分别有:IC卡电子密码锁、射频卡式电子密码锁、红外遥控电子密码锁、指纹识别电子密码锁和瞳孔识别电子密码锁等。IC卡电子密码锁成本低,体积小,卡片本身无须电源等优点占领了一定的市场份额,但是由于有机械接触,会产生接触磨损,而且使用不太方便,在一定程度上限制了它的应用;射频卡式电子密码锁是非接触式电子密码锁,成本也不太高,体积跟IC卡密码锁相当,卡片使用感应电源,重量很轻,技术成熟,受到了广泛的欢迎,但是与IC卡电子密码锁相比,成本偏高;指纹识别电子密码锁和瞳孔识别电子密码锁可靠性很高,安全性是目前应用系统中最高的,但是成本高昂,还没进入大众化使用阶段。 在国外,美国、日本、德国的电子密码锁保密性较好,并结合感应卡技术,生物识别技术,使电子密码锁系统得到了飞跃式的发展。这几个国家的密码锁识别的密码更复杂,并且综合性比较好,已经进入了成熟期,出现了感应卡式密码锁,指纹式密码锁,虹膜密码锁,面部识别密码锁,序列混乱的键盘密码锁等各种技术的系统,它们在安全性,方便性,易管理性等方面都各有特长,新型的电子密码锁系统的应用也越来越广。 基于FPGA的电子密码锁是新型现代化安全管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子,机械,计算机技术,通讯技术,生物技术等诸多新技术。它是解决重要部门出入口实现安全防范管理的有效措施,适用各种场合,如银行、宾馆、机房、军械库、机要室、办公间、智能化小区、工厂、家庭等。 在数字技术网络技术飞速发展的今天,电子密码锁技术得到了迅猛的发展。它早已超越了单纯的门道及钥匙管理,逐渐发展成为一套完整的出入管理系统。它在工作环境安全、人事考勤管理等行政管理工作中发挥着巨大的作用。在该系统的基础上增加相应的辅助设备可以进行电梯控制、车辆进出控制,物业消防监控、餐饮收费、私家车库管理等,真正实现区域内一卡智能管理。

verilog有限状态机实验报告(附源代码)

有限状态机实验报告 一、实验目的 ●进一步学习时序逻辑电路 ●了解有限状态机的工作原理 ●学会使用“三段式”有限状态机设计电路 ●掌握按键去抖动、信号取边沿等处理技巧 二、实验内容 用三段式有限状态机实现序列检测功能电路 a)按从高位到低位逐位串行输入一个序列,输入用拨动开关实现。 b)每当检测到序列“1101”(不重叠)时,LED指示灯亮,否则灭,例如 i.输入:1 1 0 1 1 0 1 1 0 1 ii.输出:0 0 0 1 0 0 0 0 0 1 c)用八段数码管显示最后输入的四个数,每输入一个数,数码管变化一次 d)按键按下的瞬间将拨动开关状态锁存 i.注意防抖动(按键按下瞬间可能会有多次的电平跳变) 三、实验结果 1.Rst_n为0时数码管显示0000,led灯不亮,rst_n拨为1,可以开始输入,将输 入的开关拨到1,按下按钮,数码管示数变为0001,之后一次类推分别输入1, 0,1,按下按钮后,数码管为1101,LED灯亮,再输入1,LED灯灭,之后再输 入0,1(即共输入1101101使1101重叠,第二次LED灯不亮),之后单独输入

1101,LED灯亮 2.仿真图像 刚启动时使用rst_n 一段时间后 其中Y代表输出,即控制led灯的信号,sel表示数码管的选择信号,seg表示数码管信号 四、实验分析 1、实验基本结构

其中状态机部分使用三段式结构: 2、整体结构为:

建立一下模块: Anti_dither.v 输入按键信号和时钟信号,输出去除抖动的按键信号生成的脉冲信号op 这一模块实现思路是利用按钮按下时会持续10ms以上而上下抖动时接触时间不超过10ms来给向下接触的时间计时,达到上限时间才产生输出。 Num.v 输入op和序列输入信号A,时钟信号clk和复位信号,复位信号将num置零,否则若收到脉冲信号则将num左移一位并将输入存进最后一位。输出的num即为即将在数码管上显示的值 Scan.v 输入时钟信号,对其降频以产生1ms一次的扫描信号。 Trigger.v 这一模块即为状态机模块,按三段式书写。 整个模块的输入为时钟信号,脉冲信号,序列输入变量,复位信号,输出LED灯控制信号Y。 第一段是状态转换模块,为时序逻辑电路,功能是描述次态寄存器迁移到现态寄存器。即如果收到复位信号将现态置零,否则将上次得到的next_state赋给current_state。

基于FPGA的VerilogHDL数字钟设计

基于FPGA的Verilog-HDL数字钟设计--

————————————————————————————————作者:————————————————————————————————日期:

基于FPGA的Verilog HDL数字钟设计 专业班级姓名学号 一、实验目的 1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程; 2.熟悉一种EDA软件使用; 3.掌握Verilog设计方法; 4.掌握分模块分层次的设计方法; 5.用Verilog完成一个多功能数字钟设计; 6.学会FPGA的仿真。 二、实验要求 功能要求: 利用实验板设计实现一个能显示时分秒的多功能电子钟,基本功能: 1)准确计时,以数字形式显示时、分、秒,可通过按键选择当前显示时间范围模式; 2)计时时间范围00:00:00-23:59:59 3)可实现校正时间功能; 4)可通过实现时钟复位功能:00:00:00 扩展功能: 5)定时报:时间自定(不要求改变),闹1分钟(1kHz)---利用板上LED或外接电路实现。 6)仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)] ---用板上LED或外接 7)报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---用板上LED或外接

8)手动输入校时; 9)手动输入定时闹钟; 10)万年历; 11)其他扩展功能; 设计步骤与要求: 1)计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。 2)在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电路系 统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。 3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快 得出仿真结果)。 4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit文件。 5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。 三、实验设计 功能说明:实现时钟,时间校时,闹铃定时,秒表计时等功能 1.时钟功能:完成分钟/小时的正确计数并显示;秒的显示用LED灯的闪烁做指示; 时钟利用4位数码管显示时分; 2.闹钟定时:实现定时提醒及定时报时,利用LED灯代替扬声器发出报时声音; 3.时钟校时:当认为时钟不准确时,可以分别对分钟和小时位的值进行调整; 4.秒表功能:利用4个数码管完成秒表显示:可以实现清零、暂停并记录时间等功能。 秒表利用4位数码管计数; 方案说明:本次设计由时钟模块和译码模块组成。时钟模块中50MHz的系统时钟clk分频产

第10章例题verilog源代码(夏宇闻版)

第十章例题 module add_4( X, Y, sum, C); input [3 : 0] X, Y; output [3: 0] sum; output C; assign {C, Sum } = X + Y; endmodule //而16位加法器只需要扩大位数即可,见下例: module add_16( X, Y, sum, C); input [15 : 0] X, Y; output [15 : 0] sum; output C; assign {C, Sum } = X + Y; endmodule 快速乘法器常采用网格形式的迭带阵列结构,图10.3示出两个四位二进制数相乘的结构图,//用Verilog HDL来描述乘法器是相当容易的,只需要把运算表达式写出就可以了,见下例。module mult_4( X, Y, Product); input [3 : 0] X, Y; output [7 : 0] Product; assign Product = X * Y; endmodule // 而8位乘法器只需要扩大位数即可,见下例: module mult_8( X, Y, Product); input [7 : 0] X, Y; output [15 : 0] Product; assign Product = X * Y; endmodule

// 下面就是一个位数可以由用户定义的比较电路模块: module compare_n ( X, Y, XGY, XSY, XEY); input [width-1:0] X, Y; output XGY, XSY, XEY; reg XGY, XSY, XEY; parameter width = 8; always @ ( X or Y ) // 每当X 或Y 变化时 begin if ( X = = Y ) XEY = 1; // 设置X 等于Y的信号为1 else XEY = 0; if (X > Y) XGY = 1; // 设置X 大于Y的信号为1 else XGY = 0; if (X < Y) XSY = 1; // 设置X 小于Y的信号为1 else XSY = 0; end endmodule //下面就是带使能控制信号(nCS)的数据位宽可以由用户定义的(8位)八路数据通道选择器模块: module Mux_8( addr,in1, in2, in3, in4, in5, in6, in7, in8, Mout, nCS); input [2:0] addr; input [width-1:0] in1, in2, in3, in4, in5, in6, in7, in8; input nCS; output [width-1:0] Mout; parameter width = 8; always @ (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or nCS) begin if (!nCS) //nCS 低电平使多路选择器工作 case(addr) 3’b000: Mout = in1; 3’b001: Mout = in2; 3’b010: Mout = in3; 3’b011: Mout = in4;

基于FPGA的SDRAM实验Verilog源代码

// megafunction wizard: %ALTPLL% // GENERATION: STANDARD // VERSION: WM1.0 // MODULE: altpll // ============================================================ // File Name: clk_ctrl.v // Megafunction Name(s): // altpll // // Simulation Library Files(s): // altera_mf // ============================================================ // ************************************************************ // THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! // // 11.0 Build 208 07/03/2011 SP 1 SJ Full Version // ************************************************************ //Copyright (C) 1991-2011 Altera Corporation //Your use of Altera Corporation's design tools, logic functions //and other software and tools, and its AMPP partner logic //functions, and any output files from any of the foregoing //(including device programming or simulation files), and any //associated documentation or information are expressly subject //to the terms and conditions of the Altera Program License //Subscription Agreement, Altera MegaCore Function License //Agreement, or other applicable license agreement, including, //without limitation, that your use is for the sole purpose of //programming logic devices manufactured by Altera and sold by //Altera or its authorized distributors. Please refer to the //applicable agreement for further details. // synopsystranslate_off `timescale 1 ps / 1 ps // synopsystranslate_on moduleclk_ctrl ( areset, inclk0, c0, c1, c2,

基于FPGA的verilog频率计设计

电子科技大学 (基于FPGA的频率计设计) 题目:简易频率计的设计 指导教师:皇晓辉 姓名:张旗 学号:2905201003 专业:光电学院一专业

摘要 本文主要介绍了基于FPGA 的简易多量程频率计的设计,使用硬件描述语言verilog来实现对硬件的控制,在软件ISE上实现编程的编译综合,在系统时钟48Mhz下可正常工作。该数字频率计采用测频的方法,能准确的测量频率在10Hz到100MHz之间的信号。使用ModelSim仿真软件对Verilog程序做了仿真,并完成了综合布局布线,通过ISE下载到Spartan3A开发板上完成测试。 关键词:FPGA ,verilog,ISE,测频方法

Abstract This paper mainly introduces the simple more range based on FPGA design of frequency meter,Use hardware description language verilog to realize the control of hardware,In the software realize the compilation of the programming ISE on comprehensive,In the system clock can work normally under 48 Mhz。The digital frequency meter frequency measurement method used, can accurate measurement frequency in 10 Hz to 100 MHz of signals between。Use ModelSim simulation software Verilog program to do the simulation, and completed the overall layout wiring,Through the ISE downloaded to Spartan3A development board complete test。 Keywords: FPGA, Verilog, ISE, F requency M easurement

ADDA等一些芯片的verilog程序

/* AD0809 module v1.0 work up to 5M sample = 25us 40khz for normal clk = 2.5M sample = 30us 33khz */ module ad0809( clkin, adclk, eoc, st, ale, datain, oe, dataout ); input clkin; input eoc; input [7:0]datain; output st; output ale; output oe; output adclk; output [7:0]dataout; reg adclk; reg [7:0]dataout; reg st; reg oe; reg ale; //frequence divider for AD parameter Div_adclk = 8'd9;//(9+1)*2=20 adclk=2.5M parameter Div_clk_state = 4'd4;//(4+1)*2=10 clk_state=5M

reg [8:0]div_cnt_ad;//frequence div cnt reg [3:0]div_cnt_state; reg clk_state; always@(negedge clkin)begin if(div_cnt_ad != Div_adclk) div_cnt_ad <= div_cnt_ad + 1'b1; else begin div_cnt_ad <= 0; adclk <= ~adclk; end if(div_cnt_state != Div_clk_state) div_cnt_state <= div_cnt_state + 1'b1; else begin div_cnt_state <= 0; clk_state <= ~clk_state; end end /*AD convert*/ reg [3:0]state; reg [7:0]delay; initial begin state <= 4'd0; end always@(negedge clk_state)begin case(state) 4'd0:begin //clear all st <= 1'b0; oe <= 1'b0; ale <= 1'b0;

基于FPGA的DS18B20控制程序设计及其Verilog实现(汇编)

基于FPGA的DS18B20控制程序设计及其Verilog实现 一,总体介绍 DS18B20是一个1-wire总线,12bit的数字温度传感器,其详细的参数这里不做具体的介绍,只讨论其基于Verilog的控制程序的设计。 实际上,对DS18B20的控制,主要是实现1-wire总线的初始化,读,写等操作,然后再根据DS18B20的控制要求,实现对其控制的verilog逻辑。 在1-Wire总线上,有一个master,可以有1个或者多个slave。而对于FPGA+DS18B20的温度测试设计来讲,需要在FPGA上实现一个1-Wire总线的master。DS18B20作为1-wire 总线的slave设备存在,可以有一个或者多个,不过为了简化程序,例程里假定只存在一个DS18B2020。 1-Wire总线的操作形式上相对简单,但操作本身相对却又比较复杂。用Verilog做控制程序设计时,可以采用多层次嵌套的状态机来实现。 二,FPGA + DS18B20的硬件设计 硬件的设计非常简单,只需要将DS18B20的DQ与FPGA的一个IO连接,并加4.7K左右的上拉电阻就可以了。VDD和VPU可以为3.0~5.0V。这里我们参照FPGA本身的IO电压,选择3.3V。 另外要注意的一点是,由于DQ的数据是双向的,所以FPGA的该IO要设定为inout类型。 三,1-Wire总线的基本操作及Verilog实现。 根据1-Wire总线的特点,可以把1-Wire总线的操作归结为初始化,单bit读操作,单bit写操作等最基础的几种。下面分别是几种基本操作的介绍和verilog实现。由于DS18B20的时序操作的最小单位基本上是1us,所以在该设计中,全部采用1MHz的时钟。 1. 初始化 初始化实际上就是1-wire总线上的Reset操作。由master发出一定长度的初始化信号。Slave 看到该初始化信号后,在一定时间内发出规定长度的响应信号,然后初始化操作就结束了。下图是DS18B20的datasheet上给出的初始化的时序要求图示。

几个常用的Verilog小程序

几个常用的Verilog小程序 (1) 8位串并转换 module haidaoqi(clk,rst,din,dout); input clk,rst,din; output [7:0] dout; reg[7:0] data,dout; reg[2:0] cnt; always@(posedge clk or posedge rst) if(rst) //复位高有效 data <=8'b0; else data<= {data[7:0],din};//din是输入串行数据,假设输入数据高位在前 //这是一个移位寄存器 always@(posedge clk or posedge rst) if(rst) cnt <= 3'b0; else if(cnt == 3'b111) cnt <= 3'b0; else cnt <= cnt +1;//计数器,用来计算移位次数,移位8次在以

后产生一个有效数据 always@(posedge clk or posedge rst) if(rst) dout <= 8'b0; else if(cnt == 3'b111) dout <= data;//如果计数器记到7,那么输出一个有效的8位数据 else dout <= 0; endmodule (2) 8 位数据寄存器 module reg8(out_data,in_data,clk,clr); output[7:0] out_data; input[7:0] in_data; input clk,clr; reg[7:0] out_data; always @(posedge clk or posedge clr) begin

基于FPGA ad数据采集存储处理报告(含Verilog源代码)

基于FPGA AD数据采集存储处理项目报告 (XILINX ALTEARA 都可用) 组员:华、文、杰 一、实验目的 本次实验利用Basys2开发板完成一个开发小项目,即开发AD数据采集存储处理系统,旨在掌握FPGA开发基本方法以及锻炼解决开发过程中出现问题的能力。 二、关键词 Basys2、FPGA、AD转换、RAM、串口通信、MATLAB处理 三、方案设计 要实现本次项目,首先确定器件,其次根据器件时序写出模块的使用程序,最后综合成一个工程,然后进行仿真,上板实验。 本次实验的器件:32M8位模数转换器、Basys2开发板、串口转RS232cp2102模块、基于三极管的电平转换电路。 选择好器件后,根据器件的时序完成模块的代码书写。 写好AD模块、串口通信模块后,现在就需要处理采样速率与串口通讯速率不匹配的问题了。根据香农采样定理,采样频率得高于信号频率的两倍才能完成信号复现,我们这里使用25M的高速采样频率,而串口dps9600传送一个位104us 明显比采样慢许多。所以这里需要解决速率不匹配的问题。我们想到可以利用FPGA的RAM先存储采样来的数据,然后再提取数据经过串口通信送至PC经由MATLAB处理。 本次小项目最为关键的是控制好采样与串口通信的时序问题。关于时序的控制,留到模块介绍里面说明。 方案小结:本次实验基于片内RAM存储AD采样过来的数据,然后待采样完成后提取数据串口通信至PC,最后经由matlab处理。 四、模块介绍 1.Verilog开发程序介绍 如下给出基于QuartusII绘制出的Block Diagram图,涵盖了所有的模块以及模块之间的连线。 图4.1 综合模块图 如下给出程序目录(txt格式):

基于FPGA的四路抢答器的Verilog HDL代码

module qiangda4(clk,clr,inputEn,add,stu,inputL1,inputL2,inputL3,inputL4,Led1,Led2,Led3,B uzzer); // 开始声明各个端口 //输入口 input clk,clr,inputEn,add,stu,inputL1,inputL2,inputL3,inputL4; //输出口 output [0:7] Led1; //倒计时时使用的LED控制端 output [0:7] Led2; //数码管控制端 output [0:7] Led3; //分数显示数码管控制端 output Buzzer; //蜂鸣器 //各个寄存器变量声明 reg [0:7] Led1; reg [0:7] Led2; reg [0:7] Led3; reg cnt=32'b0; reg Buzzer; reg score=4’hf;//分数显示寄存器 //配置寄存器,EnFlat是表明开始抢答的标志位 reg EnFlat=1'b0; //BuClk是蜂鸣器的标志位 reg BuClk=1'b0; //BuL是做蜂鸣器的延时用 reg [0:7]BuL=8'd0; //抢答选手标志位 reg answer=3’d0; //各组分数标志位 reg score1=4’d5; reg score2=4’d5; reg score3=4’d5; reg score4=4’d5; //------------初始化模块--------------- always @ (posedge clk)//捕捉时钟 begin //初始化各按键并开始抢答 begin if(inputEn==1'b0) begin //初始化各个标志位和参数

verilog源代码第8.9章例题

第八章语法概念总复习练习 1)以下给出了一个填空练习,请将所给各个选项根据电路图,填入程序中的适当位置。 a s s i g n m o d u l e;~| &i n p u t o u t p u t i n p u t s o u t p u t s e n d m o d u l e A , B , C , D AOI ( A, B, C, D, F ) input A,B,C,D; output F; assign F = ((A&B)&(C&D)); endmodule

2〕 在这一题中,我们将作有关层次电路的练习,通过这个练习,你将加深对模块间调 用时,管脚间连接的理解。假设已有全加器模块FullAdder,若有一个顶层模块调用此全加器,连接线分别为W4,W5,W3,W1和W2。请在调用时正确地填入I/O 的对应信号。 module FullAdder(A,B,Cin,Sum,Cout); input A, B, Cin; output Sum, Cout; endmodule 3) initial begin end initial SEL=0; A=0; B=0; #10 A=1; #10 SEL=1; #10 B=1; $monitor (SEL , A ,B , ,F) ; reg A, B , SEL; wire F; A Sum W1 W2 W3 W4 W5 B Cin Count

endmodule 标准答案: module TestFixture reg A,B,SEL; wire F; MUX2M(SEL,A,B,F); initial begin SEL=0; A=0; B=0; #10 A=1; #10 SEL=1; #10 B=1; end initial $monitor(SEL,A,B,,F); endmodule 4)指出下面几个信号的最高位和最低位。 reg [1:0] SEL; input [0:2] IP; wire [16:23] A; 标准答案: MSB:SEL[1] MSB:IP[0] MSB:A[16] LSB:SEL[0] LSB:IP[2] LSB:A[23] 5)P,Q,R都是4bit的输入矢量,下面哪一种表达形式是正确的。 1)input P[3:0],Q,R; 2)input P,Q,R[3:0]; 3)input P[3:0],Q[3:0],R[3:0]; 4)input [3:0] P,[3:0]Q,[0:3]R; 5)input [3:0] P,Q,R; 标准答案:5) 6)请将下面选项中的正确答案填人空的方括号中。 1. (0:2) 2. (P:0) 3. (Op1:Op2) 4.(7:7) 5. (2:0) 6. (7:0) reg [7:0] A; reg [2:0] Sum, Op1, Op2; reg P, OneBit; initial begin Sum=Op1+Op2; P=1; A[ ]=Sum; .....

相关文档
相关文档 最新文档