当前位置: 首页 > news >正文

常用数字器件的描述-时序逻辑器件的描述

目录

锁存器与触发器

寄存器与移位寄存器

分频器及其应用

偶分频器

奇分频器

半整数分频器

分频器的应用


锁存器与触发器

  锁存器与触发器是两种最基本的存储电路。 锁存器是电平敏感器件,而触发器是边沿触发器件。    为了使用灵活方便,商品化的锁存器/触发器都附加有复位端(和置位端),分为异步复位和同步复位两类。

  描述具有异步复位功能的JK触发器的Verilog代码参考如下:

module JKFF_async_rst(clk,rst_n,j,k,q);input clk,rst_n;input j,k;output reg q;always @( posedge clk or negedge rst_n )if ( !rst_n )     // 低电平有效q <= 1'b0;else     

  描述具有异步复位功能的D触发器的Verilog代码参考如下:

module DFF_async_rst(clk,rst_n,d,q);input clk,rst_n,d;output reg q;always @( posedge clk or negedge rst_n )if ( !rst_n )q <= 1'b0;  elseq <= d;
endmodule     

描述具有同步复位功能的D触发器的Verilog代码参考如下:

module DFF_sync_rst(clk,rst_n,d,q);input clk,rst_n,d;output reg q;always @ ( posedge clk )if ( !rst_n )q <= 1'b0;  elseq <= d;
endmodule     

寄存器与移位寄存器

   74HC573是8位三态寄存器,内部由D锁存器构成,在微处理器/控制器系统中用于数据或者地址信号的锁定。

 module HC573(d,le,oe_n,q);input [7:0] d;input le,oe_n;output wire [7:0] q;// 定义内部变量reg [7:0] qtmp;                  // 三态输出assign q = (!oe_n)? qtmp : 8'bz;  // 锁存过程always @( d, le )                  if ( le ) qtmp <= d;
endmodule

   74HC194是四位双向移位寄存器,具有异步复位,同步左移/右移、并行输入和保持功能。

module HC194(clk,rd_n,s,din,dil,dir,q);input clk,rd_n,dil,dir;input [0:3] din;input [1:0] s;output reg [0:3] q;// 功能描述always @(posedge clk or negedge rd_n)           if (!rd_n) q <= 4'b0000;else case (s)2'b01: // 右移q[0:3] <= {dir,q[0:2]};  2'b10: // 左移q[0:3] <= {q[1:3],dil};   2'b11: // 并行输入q <= din;                    default: // 保持q <= q;                                                       endcaseendmodule

   74HC160/162为常用的同步十进制计数器,74HC161/163为常用的同步十六进制计数器。74HC160/161/162/163的管脚排列完全相同,不同的是,74HC160/161具有异步复位功能,74HC162/163具有同步复位功能

 module HC160(clk,rd_n,ld_n,ep,et,d,q,co);input clk,rd_n,ld_n,ep,et;input [3:0] d;output reg [3:0] q;output wire co;// 进位逻辑assign co = (( q == 4'b1001 ) & et );      // 计数过程always @( posedge clk or negedge rd_n )  if ( !rd_n ) q <= 4'b0000;else if ( !ld_n )   q <= d;else if ( ep & et )if ( q == 4'b1001 )  q <= 4'b0000;  else   q <= q + 1'b1; endmodule

   74HC191是单时钟16进制加/减计数器,其中U'/D是计数方式控制端,当U'/D=0时实现加法计数,U'/D=1时实现减法计数。进/借位信号C/B在进行加法计数时,在状态“1111”输出进位信号,在进行减法计数时,在状态“0000”输出借位信号。

 module HC191(clk,s_n,ld_n,und,d,q,ocb);input clk,s_n,ld_n,und;input [3:0] d;output reg [3:0] q;output wire ocb;// 进位和借位逻辑assign ocb = (~und &( q==4'b1111 )) |   ( und &(q == 4'b0000));// 计数过程always @(posedge clk or negedge ld_n)if ( !ld_n )  q <= d;else if ( !s_n )if ( !und )  q <= q + 1'b1;else   q <= q - 1'b1;endmodule

分频器及其应用

CD4060: 14级异步二进制 计数器/分频器, 带RC或者晶振电路。

   分频器是一种时序逻辑电路,用于降低信号的频率。    设分频器时钟信号的频率用fclk表示,分频输出信号的频率用ffpout表示,则N分频器输出信号的频率与时钟信号频率之间的关系为:ffpout=fclk/N。    根据分频系数N的特点,可将分频器分为偶分频器,奇分频器和半小数分频器三种基本类型。    通用分频器的实现方法是:应用 N 进制计数器(状态:0~N-1),将待分频的信号作为计数器的时钟脉冲,分频信号作为输出。设 M 为 1~N-1 之间的任意整数,在计数器从 0 计到 M-1 期间, 分频信号输出为低(或高)电平,再从 M 计到 N-1 期间,分频信号输出为高(或低)电平。 其中 M 的具体数值可根据占空比的要求进行调整。

 module fp_N ( clk,en,N,M,fp_out );input clk,en;       // en为分频器控制(enable)信号,高电平有效input [11:0] N;    // 分频系数N,定义为12位时最大分频系数为4095       input [11:0] M;     // 高低电平分界设置,根据需要可在1~4095之间调整output wire fp_out;      // 分频输出信号// 定义内部计数器reg [11:0] cnt;           // 容量应满足2n≥Nassign fp_out = ( cnt < M ) ? 1'b0 : 1'b1; // 分频输出// 分频过程always @( posedge clk )    if ( !en )  cnt <= 12'b0;            // 控制信号无效时 else  if ( cnt < N-1 )cnt <= cnt + 1'b1; else  cnt <= 12'b0;   endmodule

偶分频器

   偶分频器的分频系数N为偶数。    输出为方波的偶分频器除了通用分频器,取M=N/2的实现方法之外,还有另一种实现方法:应用N/2进制计数器,将待分频的信号作为计数器的时钟脉冲,分频信号作为输出。每当计数器计满N/2个脉冲时,控制分频输出信号翻转,同时将计数器清零,在下次时钟到来时重新开始计数。如此循环反复,可以实现任意偶数分频。

  module fp_even( clk,en,N_even,fp_out );input clk,en;                  // en为分频器控制(enable)信号,高电平有效input [11:0] N_even;        // 偶分频系数N,定义12位时最大分频系数为4094output reg fp_out;           // 分频信号输出// 定义内部n位计数器reg [11:0] cnt;               // 计数容量应满足2n≥(N/2)// 分频过程always @ ( posedge clk )if ( !en )                    // 控制信号无效时 begin  cnt <= 12'b0;  fp_out<= 1'b0;  endelseif ( cnt < ( N_even/2-1 ))cnt <= cnt + 1'b1; elsebegin  cnt <= 12'b0; fp_out<= ~fp_out;  end
endmodule 

奇分频器

   奇分频器的分频系数 N 为奇数。     如果不要求分频输出信号为方波,奇分频可以用通用分频器实现。     如果要求分频输出信号为方波,则具体的实现方法是:应用两个N进制计数器,将待分频的信号作为计数器的时钟脉冲,分别在时钟脉冲的上升沿和下降沿进行N进制计数。当计数器从0计到(N-1)/2时分频输出为低电平,再从(N+1)/2计到N-1时分频输出为高电平,分别得到两个占空比非50%的分频信号,然后将两个分频输出信号相或即可得到方波信号。

  module fp_odd(clk,en,N_odd,fp_out);input clk,en;                     // en为分频器控制信号,高电平有效input [11:0] N_odd;            // 奇分频系数N,定义为12位最大分频系数为4095output wire fp_out;reg [11:0] cnt1,cnt2;         // 内部n位计数器,计数容量应满足2n>N(* synthesis,probe_port,keep *) wire  fp1,fp2;  // 内部线网assign fp1 = (cnt1 <= (N_odd-1)/2)? 0:1;  // 输出逻辑assign fp2 = (cnt2 <= (N_odd-1)/2)? 0:1;assign fp_out = fp1 | fp2;always @( posedge clk )   // 上升沿计数if ( !en )   cnt1 <= 12'b0;else if ( cnt1 < N_odd-1 )   cnt1 <= cnt1 + 1'b1; else   cnt1 <= 12'b0; always @ ( negedge clk )    // 下降沿计数if ( !en )   cnt2 <= 12'b0;else if ( cnt2 < N_odd-1 )  cnt2 <= cnt2 + 1'b1;else   cnt2 <= 12'b0;endmodule

半整数分频器

  半整数分频器是指分频系数为整数一半(如10.5)的分频器。     半整数分频器的实现电路,其中模块N_Counter为上升沿工作的N进制计数器,co为其进位信号。

 module fp10p5(clk,fp_out);input clk;output wire fp_out;// 定义内部变量和信号reg [3:0] cnt;  (* synthesis,probe_port,keep *) wire co;reg q;wire cnt_clk;// 描述异或门和输出assign cnt_clk = clk ^ q;// 描述输出assign fp_out = q;// 进位信号  assign co = ( cnt == 4'd10 );  // 描述11进制计数器 always @( posedge cnt_clk ) if ( cnt == 4'd10 )    cnt <= 4'd0;elsecnt <= cnt + 1'b1;// 描述T'触发器always @( posedge co )q <= ~q ;
endmodule

分频器的应用

   分频器在电子系统中应用广泛。例如,要使用逻辑电路控制直流电机的速度,通常采用脉冲周期固定、占空比可调的PWM信号应用图所示的驱动电路控制直流电机的转速,其中SSR为固态继电器(Solid State Relay),而PWM信号则基于例的通用分频器实现。

   应用PWM控制电机转速的原理是:PWM输出脉冲的平均直流量与占空比成正比。PWM信号的占空比越大,电机得到的平均电流量越大,电机的转速就越高。所以,只需要改变PWM信号的占空比,就可以调节电机的转速。


http://www.mrgr.cn/news/71977.html

相关文章:

  • 在C++上实现反射用法
  • AI 大模型应用:AI开发的捷径工作流模式
  • 【话题讨论】AI赋能电商:创新应用与销售效率的双轮驱动
  • Android setContentView执行流程(一)-生成DecorView
  • 现代无线通信接收机架构:超外差、零中频与低中频的比较分析
  • 骨传导耳机哪家好?这五大热门高口碑骨传导耳机别错过!
  • 类似keepalived的软件还有哪些
  • Docker部署Redis哨兵
  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 【知识科普】ARM架构和x86架构
  • CustomersettleController
  • 大循环引起CPU负载过高
  • Android命令行启动SoftAP功能
  • golang项目三层依赖架构,自底向上;依赖注入trpc\grpc
  • 51c视觉~合集6
  • 【含文档】基于ssm+jsp的在线网课管理系统(含源码+数据库+lw)
  • 音视频入门基础:MPEG2-TS专题(3)——TS Header简介
  • 解剖C++模板(2) —— 模板匹配规则及特化
  • 面向对象试题答案
  • 【Python爬虫实战】轻量级爬虫利器:DrissionPage之SessionPage与WebPage模块详解
  • 斯坦福泡茶机器人DexCap源码解析:涵盖收集数据、处理数据、模型训练三大阶段
  • MATLAB基础应用精讲-【数模应用】Google Caffeine算法
  • Linux设置socks代理
  • Mapwindow5代码BUG记录1
  • AI与育儿领域的融合——探索未来的可能性
  • 计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习