FPGA中verilog时序逻辑电路设计.ppt

上传人:max****ui 文档编号:6346155 上传时间:2020-02-23 格式:PPT 页数:39 大小:372.05KB
返回 下载 相关 举报
FPGA中verilog时序逻辑电路设计.ppt_第1页
第1页 / 共39页
FPGA中verilog时序逻辑电路设计.ppt_第2页
第2页 / 共39页
FPGA中verilog时序逻辑电路设计.ppt_第3页
第3页 / 共39页
点击查看更多>>
资源描述
第4章时序逻辑电路设计 1 时序电路的基本概念 数字电路按照结构特点不同分为两大类 组合逻辑电路 简称组合电路 和时序逻辑电路 简称时序电路 组合电路是指由各种门电路组合而成的逻辑电路 输出只取决于当前输入信号的变化 与以前各时刻的输入或输出无关 组合电路没有记忆功能 例如 编 译码器 加法器等常用数字电路都属于组合电路 时序逻辑电路是具有记忆功能的逻辑电路 记忆元件一般采用触发器 因此 时序逻辑电路由组合电路和触发器组成 其等效模型如图4 5所示 1模型 时序电路按其状态的改变方式不同 可分为同步时序逻辑电路和异步时序逻辑电路两种 在图4 5中 当CLK1与CLK2为相同信号时 该电路为同步电路 当CLK1与CLK2为不同信号时 该电路为异步电路 1建立和保持时间 触发器的建立时间 Tsu 是指时钟有效沿 这里指上升沿 到来之前数据应保持稳定的时间 触发器的保持时间 Thd 是指时钟有效沿 这里指上升沿 到来之后数据应保持稳定的时间 1 同步电路设计规则 1 在用VerilogHDL进行数字逻辑设计时 只使用一个主时钟 同时只使用同一个时钟沿 上升沿或下降沿 2 在FPGA设计中 推荐所有输入 输出信号均应通过寄存器寄存 寄存器接口当作异步接口考虑 3 当全部电路不能用同步电路思想设计时 即需要多个时钟来实现 则可以将全部电路分成若干局部电路 尽量以同一时钟为一个模块 局部电路之间接口当异步接口考虑 4 电路中所有的寄存器 状态机在上电复位时必须有一个确定的初始态 5 电路的实际最高频率不应大于理论最高频率 应留有设计余地 标准同步电路 DFF DFF DFF DFF 组合逻辑 组合逻辑 组合逻辑 组合逻辑 clock 2D触发器 1 上升沿触发的触发器2 带异步复位 上升沿触发的触发器3 带异步复位和置位 上升沿触发的触发器4 带异步复位和时钟使然 上升沿触发的触发器5 带同步复位 上升沿触发的触发器 上升沿触发的触发器 moduledff data clk q inputdata clk outputq regq always posedgeclk beginq data endendmodule 带异步复位 上升沿触发的触发器 moduledff asynrst data rst clk q inputdata rst clk outputq regq always posedgeclkorposedgerst beginif rst 1 b1 q 1 b0 elseq data endendmodule 带异步复位和置位 上升沿触发的触发器 moduledff asynrst data rst set clk q inputdata rst set clk outputq regq always posedgeclkorposedgerstorposedgeset beginif rst 1 b1 q 1 b0 elseif set 1 b1 q 1 b1 elseq data endendmodule 带异步复位和时钟使然 上升沿触发的触发器 moduledff asynrst data rst en clk q inputdata rst en clk outputq regq always posedgeclkorposedgerst beginif rst 1 b1 q 1 b0 elseif en 1 b1 q data endendmodule 带同步复位 上升沿触发的触发器 moduledff synrst data rst clk q inputdata rst clk outputq regq always posedgeclk beginif rst 1 b1 q 1 b0 elseq data endendmodule 移位寄存器 移位寄存器是一种在时钟脉冲的作用下 将寄存器中的数据按位移动的逻辑电路主要功能 串并转换串行输入串行输出串行输入并行输出并行输入串行输出 串入串出移位寄存器 基本串入串出移位寄存器原理图8位移位寄存器由8个D触发器串联构成 在时钟信号的作用下 前级的数据向后移动 串行输入串行输出移位寄存器 moduleshift 1 din clk dout inputdin clk outputdout regdout regtmp1 tmp2 tmp3 tmp4 tmp5 tmp6 tmp7 always posedgeclk begintmp1 din tmp2 tmp1 tmp3 tmp2 tmp4 tmp3 tmp5 tmp4 tmp6 tmp5 tmp7 tmp6 dout tmp7 endendmodule 串入并出shiftregister 4位串行输入并行输出移位寄存器的逻辑电路如图所示 该寄存器由4个同步D触发器组成这种D触发器的R端是是非同步清零端 串行输入并行输出移位寄存器 moduleshift 2 din clk clr q inputdin clk clr output 3 0 q reg 3 0 q always posedgeclkornegedgeclr beginif clr 1 b0 q 4 b0000 elsebeginq 0 din q q 1 endendendmodule 并入串出shiftregister 并入串出移位寄存器可以将一组二进制数并行送入一组寄存器 然后把这些数据串行从寄存器内输出 一个同步并入串出移位寄存器的基本管脚 并行输出输入端 data时钟脉冲输入端 clk加载数据端 load串行数据输出端 dout 并行输入串行输出移位寄存器 moduleshift3 clk din load q inputclk load input 3 0 din outputq regq reg 3 0 tmp always posedgeclk beginif load 1 b1 tmp din elsebegintmp tmp 1 tmp 0 1 b0 q tmp 3 endendendmodule 计数器设计 计数器是一种典型的时序器件 常用于对时钟脉冲的个数进行计数 还用于定时 分频 产生同步脉冲按触发方式分 同步计数器和异步计数器最容易的计数器设计就是cnt cnt 1 但是你可能得不到最好的结果 计数器 计数器对时钟脉冲进行计数以递增计数器为例 介绍其VerilogHDL设计方法递增计数器基本引脚 时钟输入端 clk复位端 rst计数使然端 en计数输出端 cnt 计数器设计代码 modulecnt en en rst clk cnt parameterWIDTH 8 inputen rst clk output WIDTH 1 0 q reg WIDTH 1 0 q always posedgeclkorposedgerst beginif rst 1 b1 cnt 8 b00000000 elsecnt cnt 1 endendmodule VerilogHDL参考设计 1 modulecount clk cnt inputclk output 2 0 cnt reg 2 0 cnt always posedgeclk beginif cnt 7 cnt 0 elsecnt cnt 1 endendmodule modulecnt clk cnt inputclk output 2 0 cnt reg 2 0 cnt reg 2 0 next cnt always cnt begincase cnt 3 h0 next cnt 3 h1 3 h1 next cnt 3 h2 3 h2 next cnt 3 h3 3 h3 next cnt 3 h4 3 h4 next cnt 3 h5 3 h5 next cnt 3 h6 3 h6 next cnt 3 h7 3 h7 next cnt 3 h0 default next cnt 3 b000 endcaseendalways posedgeclk cnt next cnt endmodule VerilogHDL参考设计 2 问题思考 1 上述描述的是一个模为多少的计数器 2 请自行设计一个同步模12计数器3 在2基础上进行修改 设计一个带异步复位的模12计数器4 同步复位的模12计数器如何设计 项目设计1 一 目的 1 实现带计数允许和复位端的十进制 六进制和60进制计数器 2 掌握计数器类型模块的描述方法 3 掌握VeriogHDL模块的层次化设计方法 二 说明计数器是数字电路系统中最基本的功能模块之一 设计十进制 六进制和100进制计数器 要求计数器有计数允许和复位输入及进位输出功能 计数时钟可以用1Hz信号 用LED显示计数值 本设计要求用仿真和测试两种手段来验证计数器的功能 实验时 可以通过修改十进制计数器的设计得到六进制 100进制计数器 三 设计要求 1 完成各模块的VerilogHDL设计编码 2 进行功能仿真 3 下载并验证计数器功能 4 如果60进制计数器要求用6进制和10进制计数器搭建电路 请画出设计连接图 并完成设计编码和验证 分频器设计 在硬件电路设计中时钟信号是最重要的信号之一 在数字电路中 常需要对较高频率的时钟进行分频操作 得到较低频率的时钟信号 分频器设计 2的整数次幂的分频器设计 偶分频电路设计 占空比为1 15的分频电路设计 用VerilogHDL语言完成对时钟信号CLK的2分频 4分频 8分频 16分频 这也是最简单的分频电路 只需要一个计数器即可 2 4 8 16分频电路设计 2的整数次幂的分频器 modulediv1 clk rst clk2 clk4 clk8 clk16 inputrst clk outputclk2 clk4 clk8 clk16 wireclk2 clk4 clk8 clk16 reg 3 0 cnt always posedgeclkorposedgerst beginif rst 1 b1 cnt 4 b0000 elsecnt cnt 1 endassignclk2 cnt 0 assignclk4 cnt 1 assignclk8 cnt 2 assignclk16 cnt 3 endmodule 电路的功能仿真波形 6分频电路设计与实现对于分频倍数不是2的整数次幂的情况 我们只需要对源代码中的计数器进行一下计数控制就可以了 如下面用VHDL设计一个对时钟信号进行6分频的分频器 电路的仿真波形图 在进行硬件设计的时候 往往要求得到一个占空比不是1 1的分频信号 这时仍采用计数器的方法来产生占空比不是1 1的分频信号 下面源代码描述的是这样一个分频器 将输入的时钟信号进行16分频 分频信号的占空比为1 15 也就是说 其中高电位的脉冲宽度为输入时钟信号的一个周期 占空比1 15分频电路设计 占空比为1 15的分频电路设计 modulediv1 15 clk rst clk16 inputrst clk outputclk16 regclk16 reg 3 0 cnt always posedgeclkorposedgerst beginif rst 1 b1 cnt 4 b0000 elsecnt cnt 1 endalways posedgeclkorposedgerst beginif rst 1 b1 clk16 1 b0 elseif clk16 15 clk16 1 b1 elseclk16 1 b0 endendmodule 电路仿真波形图 偶分频电路设计 modulediv6 clk rst clk6 inputrst clk outputclk6 regclk6 reg 1 0 cnt always posedgeclkorposedgerst beginif rst 1 b1 cnt 2 b00 elseif cnt 2 begincnt 2 b00 clk6 clk6 endelsecnt cnt 1 endendmodule
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!