bupt数字逻辑时序逻辑实验

这篇具有很好参考价值的文章主要介绍了bupt数字逻辑时序逻辑实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验一 序列检测器

  • 实验内容

设计一个序列检测器检测序列1110010。

  • 设计思路

每输入一个序列1110010则会在输出端输出一个1,其余时间为0。

首先写出状态转移图,再利用case语句,根据状态转移图写出状态的转移及输出。

检测序列为七位,所以可以设状态机状态数为8个;

输出信号由当前状态和输入条件决定,设计为mealy型状态机(moore型同样可实现);

采用异步复位。

library ieee;
use ieee.std_logic_1164.all;

entity LineCheck IS
port(clk,cin,rst:in std_logic;
result:out std_logic);
end LineCheck;

ARCHITECTURE pr of LineCheck IS
type state is (s0,s1,s2,s3,s4,s5,s6,s7);
signal n_state,c_state:state;
begin
process(clk,rst)
begin
if(rst='1') then n_state<=s0;
elsif(clk'event and clk='1')
 then n_state<=c_state;
end if;
end process;

process(n_state,cin)
begin
case n_state is
when s0=> result<='0';
if(cin='1')
then c_state<=s1;
else
 c_state<=s0;
end if;
when s1=> result<='0';
if(cin='1')
then c_state<=s2;
else
c_state<=s0;
end if;
when s2=> result<='0';
if(cin='1')
then c_state<=s3;
else
 c_state<=s0;
end if;
when s3=> result<='0';
if(cin='1')
then c_state<=s3;
else
 c_state<=s4;
end if;
when s4=> result<='0';
if(cin='1')
then c_state<=s1;
else
 c_state<=s5;
end if;
when s5=> result<='0';
if(cin='1')
then c_state<=s6;
else
 c_state<=s0;
end if;
when s6=> result<='0';
if(cin='1')
then c_state<=s2;
else
 c_state<=s7;
end if;
when s7=> result<='1';
if(cin='1')
then c_state<=s1;
else
 c_state<=s0;
end if;

end case;
end process;
end pr;

波形图:

实验二 计数器

  • 实验介绍

计数器是通过电路的状态反映驶入脉冲数目的电路。计数器是应用非常广泛的时序电路,按照技术的特点分为二进制计数器、十进制计数器、环形计数器、扭环形计数器等。二进制计数器又分为加计数器、减计数器等。

  • 实验内容

用VHDL语言实现计数状态连续的模值为2N的计数器。这是一个同步清零的4位二进制加计数器,其计数的状态是从“0000~1111”进行变化。整个的计数周期是16个时钟周期,即24个时钟周期。凡是这种技术周期为2N且对计数状态无特殊要求的计数器,可以通过直接定义N位的计数信号和端口,对信号进行加或减操作,而不必进行计数状态的判断和控制。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use  ieee.std_logic_unsigned.all;
entity CountNum IS
port(clk,clr:in std_logic;
tmp:buffer bit_vector(3 downto 0));
end CountNum;
architecture CountProcess of CountNum is

begin
process(clk,clr)
begin
if(clr='1')
then tmp<=(others=>'0');
elsif(clk='1' and clk'event)
then
case tmp is
when "0000"=>tmp<="0001";
when "0001"=>tmp<="0010";
when "0010"=>tmp<="0011";
when "0011"=>tmp<="0100";
when "0100"=>tmp<="0101";
when "0101"=>tmp<="0110";
when "0110"=>tmp<="0111";
when "0111"=>tmp<="1000";
when "1000"=>tmp<="1001";
when "1001"=>tmp<="1010";
when "1010"=>tmp<="1011";
when "1011"=>tmp<="1100";
when "1100"=>tmp<="1101";
when "1101"=>tmp<="1110";
when "1110"=>tmp<="1111";
when "1111"=>tmp<="0000";
end case;
end if;
end process;

end CountProcess;

枚举法的波形就不打啦~

实验 8位寄存器74374

  • 实验介绍

在数字系统中,寄存器可用来存储一组二进制代码,而触发器具有记忆功能,所以可以用触发器构成寄存器。本实验要求同学们完成8位寄存器74374的VHDL描述。74374的逻辑框图如下图所示,功能表如下表所示。逻辑框图中D为寄存器的8位数据输入,Q位寄存器的8位数据输出端,CLK为时钟信号,OE为控制信号。从功能表可以看出OE为低电平时,在时钟上升沿输入端信号从输出端输出,其他时刻输出保持;而OE为高电平时,输出一直保持为高阻。

 

表4-1  74374的功能表

OE

CLK

D

Q

0

1

1

0

0

0

0

0

X

保持

1

X

X

高阻

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity SaveNum IS
port(d:in std_logic_vector(7 downto 0 );
OE,CLK:in std_logic;
q:buffer std_logic_vector(7 downto 0 ) );

end SaveNum;

architecture Spro of SaveNum is
begin
process(CLK,OE)
begin
if(OE='0')
then if(rising_edge(CLK))
then q<=d;
else
 q<=q;
end if;
else
q<="11111111";
end if;
end process;
process(d)
begin
end process;
end Spro;

波形图,输入的周期得调的大一点文章来源地址https://www.toymoban.com/news/detail-490232.html

到了这里,关于bupt数字逻辑时序逻辑实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 简单的状态机设计——序列检测器

    1.序列检测器 序列检测器是时序数字电路中非常常见的设计之一。它的逻辑功能是将一个指定的序列从数字码流中识别出来。 2.例1:\\\"10010\\\"序列检测器 对串行输入的数据进行检测,检测“10010”。设X为数字码流输入,Z为检出标记输出,高电平表示“发现指定序列”,低电平表

    2024年02月11日
    浏览(29)
  • “01110”双输入口序列检测器的Verilog设计

    设计一个序列检测功能的时序电路,如图所示。其输入信号有clr、clk、A、 B,输出信号Z。其中clk为时钟信号, clr是低电平有效的异步复位信号,A、B是输入数据信号。有一个二进制串行数据D0D1D2D3……Dx,以两位为一组顺序送入电路,D0送入A,D1送到B,以此类推。电路检测此

    2024年02月12日
    浏览(32)
  • 利用Verilog HDL实现序列检测器,附上仿真程序。

    序列检测器的逻辑功能就是将一个指定的比特序列从一串较长的比特流中识别出来。 例如:针对一个较长的比特流010010010011110101010…,我们希望能将比特序列为“10010”的序列检测出来,并且每次检测到10010就将输出置“1”. 注意:如序列”100100100…\\\",根据以上的介绍,会在

    2024年02月06日
    浏览(50)
  • 实验 5 巴克码检测器

    5.1 实 验 目 的 (1) 了解通信领域中经常使用的巴克码检测器的设计方法。 (2) 掌握使用状态机设计时序电路的方法。 5.2 实 验 仪 器 与 器 材 (1) EDA 开发软件 一 套 (2) 微 机 一 台 (3) 实验开发系统 一 台 (4) 打印机 一 台 (5) 其他器件与材料 若 干 5.3 实 验 说 明 巴 克 码 检 测

    2024年02月01日
    浏览(30)
  • 【 FPGA 】序列检测器 11010 (mealy状态机,moore状态机)

            状态机是硬件电路设计的常用的描述工具,也是电路设计的重要思想。很早之前我就知道mealy状态机和moore状态机,但是对两者的差别不是非常的清楚,最近在学习系列检测器的设计时对这两种状态机和一段式、三段式状态机有了更深刻的了解,在这里分享自己的见解

    2024年02月05日
    浏览(31)
  • 序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)

    目录 一、前言 二、状态机法和寄存器法 2.1状态机法 2.11 使用状态机检测“1001” 2.12 verilog代码 2.13 testbench 2.14仿真结果 2.2移位寄存器法 2.21 使用移位寄存器法检测1001 2.22 verilog代码 2.23 testbench 2.24仿真结果 三、重叠检测与非重叠检测(检测序列1001) 3.1重叠检测 3.11 重叠检测

    2024年02月04日
    浏览(32)
  • vivado序列检测器verilog代码ego1开发板验证

    名称:vivado序列检测器verilog代码ego1开发板验证 软件:VIVADO 语言:Verilog 代码功能: 设计一个111序列检测器。 要求:当检测到3个或3个以上的1时,输出为1,其他输入情况输出为0. 画出状态转移图,完成 Verilog描述。 本代码已在ego1开发板验证,开发板如下,其他开发板可以修改管

    2024年02月03日
    浏览(44)
  • 用jk触发器设计一个011序列检测器的设计分析过程

       心得体会:经过此次设计,加深了对时序逻辑电路的理解,当要求对一个连续的一串信号进行输入输出处理时可以用到有记忆存储、反馈功能的jk触发器或者d触发器。

    2024年02月04日
    浏览(37)
  • 15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测)

    序列检测器的逻辑功能: 序列检测是将一个指定的序列从数字码流中识别出来。本项目要检测的序列是:10010。 设X是“数字码流的输入”,Z是“检出标记输出”;高电平是“实现指定序列”;低电平是“没有发现指定序列”。码流如下表所示。 由上述码流可知:该序列检测

    2024年01月23日
    浏览(31)
  • Verilog设计“111”检测器与“01110”检测器并测试所有情况

    使用Quartus+modelsim完成本次设计 分析 分析题目,得到其有限状态机为下图: 代码实现 Testbench 结果 Modelsim结果如下图所示,分析可知实现了题目要求。 逻辑综合出来的电路如下图所示:即只有S3状态才会输出OUT=1。 其中的state的状态机如下图所示(RLT viewer中所示),可见其与

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包