设计一个时序逻辑电路4位同步(异步)计数器,选择其中一个用VHDL完成设计

设计一个时序逻辑电路4位同步(异步)计数器,选择其中一个用VHDL完成设计,第1张

1.编辑输入VHDL程序并设为当前工程文件

设:clr为系统时钟,clr为异步伍毕清零控制端,load为同步置数控制端,date为同步置数数据输入端口,count为计数器输出端口

实体名为:add4b.VHD

2.编译设计文蚂滚件并予仿真验证

VHDL程序:

LIBRARY ieee

USE ieee.std_logic_1164.all

USE ieee.std_logic_unsigned.all

ENTITY add4b IS

PORT(

date:IN STD_LOGIC_VECTOR(3 DOWNTO 0)

load:IN STD_LOGIC

clr:IN STD_LOGIC

clk:IN STD_LOGIC

count:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)

)

END ENTITY add4b

ARCHITECTURE upcount OF add4b IS

BEGIN

upcount:PROCESS(clk,clr)

BEGIN

  IF clr='1' THEN count<=x"0"

  ELSIF rising_edge(clk) THEN

IF load='1' THEN count<=date

ELSE count<= 闷橘余count +1

END IF

     END IF

  END PROCESS upcount

END upcount

3.波形仿真

注意:

多数C语言编译器不支持多线程,而且ANSI C也没有线程库,因此C语言无法实现实际意义上的定时器(即包含触发机制的定时器)。

回到本问题:

1 计数器:

简单的int变量(一般为全局或相对全局)就可以实现。

2 计时器:

包含time.h,使用clock相关函数,通过运行时间差来实现计慎衫时功能。示例:

/*@*/ clock_t startstart = clock()

……

/*@*/ clock_t endend = clock()

float start2end = (float)(endend-startstart)/CLOCKS_PER_SEC

// 这里的start2end就是时间差陵滑

3 定时器

使用系统API,比如Windows下的Sleep()函数(注意,是大尺孝腊写),原型如下:

VOID Sleep(

DWORD dwMilliseconds // sleep time in milliseconds

)

1.以查询方式工作,每计满100个脉冲,则取反P1.0口线状态。

    ORG   0000H

    MOV   TMOD, #06H

    MOV  伍野 TH0, #156

    MOV   TL0, #156

    SETB  TR0

LP: JNB   TF0, LP

    CPL   P1.0

    SJMP  LP

    

END

2.以中断方式工作,每计腊橘耐满200个脉冲,则取反轮春P1.0口线状态。

    ORG   0000H

    SJMP  START

    ORG   000BH

    CPL   P1.0

    RETI

START:

    MOV   TMOD, #06H

    MOV   TH0, #56

    MOV   TL0, #56

    SETB  TR0

    MOV   IE, #82H

    SJMP  $

    

END


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12452107.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存