电路与电子线路实验III(软件)——北京理工大学

实验1 QuartusII9.1软件的使用

一、实验目的

  通过模十计数器,掌握QUARTUSII9.1软件的使用;

掌握VerilogHDL语言实现组合逻辑、时序逻辑的设计以及QUARTUSII9.1软件的使用。

二、实验步骤

软件使用步骤;

  1. 创建project工程文件,命名为count10
  2. 创建verilog VHDL文件将代码贴贴进去

module count10

(

      input      clk,

      input  en,

      input   clr,

      output reg [6:0] seg

);

reg [3:0] qout;

always @ (posedge clk or posedge clr) begin

      if (clr)

             qout <= 4'b0000;

      else

             if ( en )

                    if (qout == 4'b1001)

                           qout <= 4'b0000;

                    else

                           qout <= qout +1 ;

             else

                    qout <= qout ;

                          

end

     

always @ (qout) begin

      case (qout)

             0:seg <= 7'b1000000;

             1:seg <= 7'b1111001;

             2:seg <= 7'b0100100;

             3:seg <= 7'b0110000;

             4:seg <= 7'b0011001;

             5:seg <= 7'b0010010;

             6:seg <= 7'b0000010;

             7:seg <= 7'b1111000;

             8:seg <= 7'b0000000;

             9:seg <= 7'b0010000;

             default:seg <= 7'b0001000;

      endcase

end

endmodule

然后保存为count10并进行编译

仿真参数设置;

建立仿真通道文件,使用仿真工具

 

三、软件仿真

仿真结果的记录;

时序仿真

 功能仿真

 

四、程序设计流程图或程序设计思路

三个输入:显示七段译码管(代码已经给出)第一个实验为熟悉软件

实验2 模十状态机与7段译码器显示设计与仿真

一、实验目的

通过设计频率可选的模十状态机以及7段译码电路以进一步掌握VerilogHDL硬件描述语言。

实验流程:

本设计有分频器、多路选择器、状态机和译码器。

时钟输入作为分频器的输入,输出时钟分别为2分频、4分频、8分频和16分频;

四个频率的时钟信号由4选1的多路选择器选择其中之一作为状态机的时钟输入;

使用选中的时钟频率作为输入驱动状态机按照以下的次序输出:0->2->5->6->1->9->4->8->7->3->0的顺序输出;

使用此输出作为驱动输入到7段译码器的显示逻辑。

二、实验步骤

软件使用步骤;

建立文件,建立Verilog文件

代码:

module ex3_states

(

      input clk,reset,

      input [1:0] sel,

      output reg [6:0] seg

);

      reg  [3:0] now_state;

      reg  [3:0] next_state;

      reg clk_f;

      reg [3:0] count;

     

always @ (posedge clk or posedge reset) begin

      if (reset)

             count <= 4'b0000;

      else

             count <= count + 1;

end

always @ (sel) begin

      case (sel)

             2'b00:clk_f=count[0];

             2'b01:clk_f=count[1];

             2'b10:clk_f=count[2];

             2'b11:clk_f=count[3];

      endcase

end

always @ (posedge clk_f or posedge reset) begin

      if (reset)

             now_state <= 4'd0;

      else

             now_state <= next_state;

end

always @ (now_state) begin

      case(now_state)

             4'b0000:next_state = 4'b0010;

             4'b0010:next_state = 4'b0101;

             4'b0101:next_state = 4'b0110;

             4'b0110:next_state = 4'b0001;

             4'b0001:next_state = 4'b1001;

             4'b1001:next_state = 4'b0100;

             4'b0100:next_state = 4'b1000;

             4'b0111:next_state = 4'b0011;

             4'b0011:next_state = 4'b0000;

      endcase

end

always @ (now_state) begin

      case (now_state)

             0: seg <= 7'b1000000;

             1: seg <= 7'b1111001;

             2: seg <= 7'b0100100;

             3: seg <= 7'b0110000;

             4: seg <= 7'b0011001;

             5: seg <= 7'b0010010;

             6: seg <= 7'b0000010;

             7: seg <= 7'b1111000;

             8: seg <= 7'b0000000;

             9: seg <= 7'b0010000;

             default: seg<= 7'b0001000;

      endcase

end

endmodule

保存并编译

仿真参数设置;

 

三、软件仿真

仿真结果的记录;

RST有效和二分频结果:

 4分频结果:

 8和16分频结果:

 

 

四、程序设计流程图或程序设计思路

Cout进行4分频,用reset进行状态机的置零,用next_stateanow_states进行现态和次态的转换,seg负责七段译码管的表达

实验数字钟的设计与仿真

一、实验目的

通过设计实现的数字钟的设计与仿真,以熟悉和掌握VerilogHDL语言编程。

实验流程:

系统整体计数器模块组成。

输入引脚有3+16根,其中三位分别为时钟(提供整个系统的时钟信号)、复位(系统复位信号)和置位信号(用于将时间设置到需要观察的位置)。十六位分别为分钟个位和十位、秒个位和十位。

输出引脚有16根,分别位分钟个位和十位、秒个位和十位。

二、实验步骤

软件使用步骤;

同实验一和二,建立project和Verilog文件

键入代码:

module timer

(

input clk,

input clr,

input load,

input [3:0] min_h_t,

input [3:0] min_l_t,

input [3:0] sec_h_t,

input [3:0] sec_l_t,

output reg [3:0] min_h,

output reg [3:0] min_l,

output reg [3:0] sec_h,

output reg [3:0] sec_l

);

always @(posedge clk or posedge clr) begin

      if (clr) begin

      min_h <= 0;

      min_l <= 0;

      sec_h <= 0;

      sec_l <= 0;

      end

      else if (load) begin

      min_h <= min_h_t;

      min_l <= min_l_t;

      sec_h <= sec_h_t;

      sec_l <= sec_l_t;

      end

else begin

      if (sec_l == 9) begin

             sec_l <= 0;

             if (sec_h == 5) begin

                           sec_h <= 0;

                    if (min_l == 9) begin

                           min_l <= 0;

                           if (min_h == 5)

                                  min_h <= 0;

                           else

                                  min_h <= min_h + 1;

                    end

                    else

                           min_l <= min_l + 1;

                    end

             else

                    sec_h <= sec_h + 1;

             end

      else

             sec_l <= sec_l + 1;

      end

end

endmodule

保存并编译

仿真参数设置;

 

三、软件仿真

仿真结果的记录;

 59分57秒:

 59秒:

 9分59秒:

 

四、程序设计流程图或程序设计思路

if的嵌套语句来进行进位,用load来控制数字钟时间的输入控制。注意分钟和秒钟的进位关系。

总结:心得体会

通过软件仿真,我深入了解了数字电路中模10状态机的原理以及七段译码管的构造,知道了数字钟的原理和进位机制。通过用Verilog语言编写电路模块,深入了解了Verilog语言的模块,知道了输入输出设置,寄存器的运用以及用always模块写顺序语句。软件实验让我对Verilog语言有了一个更加全面深入的了解。同时,知道了如何运用quartusII软件编写程序并进行仿真。总体来讲这次实验对我收益很大。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值