2017春FPGA阶段二作业

题目2-1:多周期-恒最大值计数-显示电路

设计思路:电路应由3部分构成
第一部分,秒脉冲生成器,输出秒脉冲信号,每秒输出1个CLK周期的高电平,用于后级电路的工作使能。
第二部分,0-9多周期计数器,每个工作使能有效的CLK周期,进行一次计数动作。
第三部分,4-7译码器,把0-9计数器的计数值,译码成HEX LED 的显示逻辑值

设计原理图

这里写图片描述

秒脉冲生成器RTL图

这里写图片描述

Verilog HDL代码
module clk_sec(
  CLK   ,   
  CNTVAL,   
  OV    );  
input CLK;
output [32-1:0] CNTVAL;
output OV;
parameter MAX_VAL = 50_00_0000;
reg [32-1:0] CNTVAL;
reg OV;
always @ (posedge CLK) begin
  if(CNTVAL >= MAX_VAL)
    CNTVAL <= 0;
  else
    CNTVAL <= CNTVAL + 1'b1;
end

always @ (CNTVAL) begin
  if(CNTVAL == MAX_VAL)
    OV = 1'b1;
  else
    OV = 1'b0;
end
endmodule 
0-9计数器RTL图

这里写图片描述

Verilog HDL代码
module cnt0to9(
  CLK   ,   // clock
  CNTVAL,   // counter value
  EN    ,
  OV    );  // overflow
input CLK;
input EN;
output [4-1:0] CNTVAL;
output OV;

reg [4-1:0] CNTVAL;
reg OV;

always @ (posedge CLK ) begin
  if(EN) begin  // work enable
    if(CNTVAL >= 9)
      CNTVAL <= 0;
    else
      CNTVAL <= CNTVAL + 1'b1;
  end
  else
    CNTVAL <= CNTVAL ;  
 end
always @ (CNTVAL) begin
  if(CNTVAL == 9)
    OV = 1'b1;
  else
    OV = 1'b0;
end
endmodule   
4-7译码器RTL图

这里写图片描述

Verilog HDL代码
module dec47 (data_in ,data_out );

input [3:0] data_in ;
output [6:0] data_out ;
reg [6:0] data_out ;

always @(data_in )
begin
data_out = 7'b1111111;
case (data_in )
4'b0000: data_out = 7'b1000000; // 0
4'b0001: data_out = 7'b1111001; // 1
4'b0010: data_out = 7'b0100100; // 2
4'b0011: data_out = 7'b0110000; // 3
4'b0100: data_out = 7'b0011001; // 4
4'b0101: data_out = 7'b0010010; // 5
4'b0110: data_out = 7'b0000011; // 6
4'b0111: data_out = 7'b1111000; // 7
4'b1000: data_out = 7'b0000000; // 8
4'b1001: data_out = 7'b0011000; // 9
4'b1010: data_out = 7'b0001000; // A
4'b1011: data_out = 7'b0000011; // b
4'b1100: data_out = 7'b0100111; // c
4'b1101: data_out = 7'b0100001; // d
4'b1110: data_out = 7'b0000110; // E
4'b1111: data_out = 7'b0001110; // F
default: data_out = 7'b1111111;
endcase
end
endmodule

Signaltap的分段触发捕获

这里写图片描述

题目2-2 :LED 亮度调节

设计思路:电路应由两部分构成
第一部分,1600Hz的脉冲发生器,10ms内有16个高电平脉冲,便于调节方波占空比
第二部分,四个不同占空比的方波发生器,根据对输入脉冲的计数,调节输出的正负,控制占空比

设计原理图

这里写图片描述

1600Hz的脉冲发生器RTL图

这里写图片描述

Verilog HDL代码
module clk_f1600(
  CLK   ,   // clock
  CNTVAL,   // counter value
  OV    );  // overflow
input CLK;
output [32-1:0] CNTVAL;
output OV;
parameter MAX_VAL = 31250;
reg [32-1:0] CNTVAL;
reg OV;

always @ (posedge CLK) begin
  if(CNTVAL >= MAX_VAL)
    CNTVAL <= 0;
  else
    CNTVAL <= CNTVAL + 1'b1;
end

always @ (CNTVAL) begin
  if(CNTVAL == MAX_VAL)
    OV = 1'b1;
  else
    OV = 1'b0;
end
endmodule  
方波发生器RTL图

这里写图片描述

Verilog HDL代码
module squWave4(
input clk,
output reg wave);
reg [3:0] count;
always @ (posedge clk)
begin 
    if(count == 15)
    begin 
        count <= 0;
    end 
    else if(count <= 3)
    begin 
       count <=count + 1'b1;
       wave <= 1'b1;
    end 
    else if(count < 15)
    begin 
        count <=count + 1'b1;
        wave <= 0;
    end 
end 
endmodule

Signaltap的分段触发捕获

Sample depth选256,选32 8 Sample segments
这里写图片描述

题目2-3 :PWM的创意发挥

一个计数器从0-9循环计数,不同的数值的亮度不同,0最暗,9最亮

设计思路:电路应由4部分构成
第一部分,秒脉冲生成器,输出秒脉冲信号,每秒输出1个CLK周期的高电平,用于后级电路的工作使能。
第二部分,0-9多周期计数器,每个工作使能有效的CLK周期,进行一次计数动作。
第三部分,可控制占空比的方波发生器,根据计数值,调节输出波形的占空比
第四部分,带使能的4-7译码器,不同占空比的方波作为使能信号,把0-9计数器的计数值,译码成HEX LED 的显示逻辑值

设计原理图

这里写图片描述
秒脉冲生成器和0-9多周期计数器与题目2-1原理相同。

可控制占空比的方波发生器RTL图

这里写图片描述

Verilog HDL代码
module squWave(
input clk,
input [3:0] max,
output reg wave);
reg [3:0] count;
always @ (posedge clk)
begin 
    if(count == 9)
    begin 
        count <= 0;
    end 
    else if(count <= max)
    begin 
       count <=count + 1'b1;
       wave <= 1'b1;
    end 
    else if(count < 9)
    begin 
        count <=count + 1'b1;
        wave <= 0;
    end 
end 
endmodule
带使能的4-7译码器RTL图

这里写图片描述

Verilog HDL代码
module dec47 (data_in ,data_out ,en);

input [3:0] data_in ;
input en;


output [6:0] data_out ;
reg [6:0] data_out ;


always @(data_in or en)
begin
data_out = 7'b1111111;
if(en)begin
case (data_in )
4'b0000: data_out = 7'b1000000; // 0
4'b0001: data_out = 7'b1111001; // 1
4'b0010: data_out = 7'b0100100; // 2
4'b0011: data_out = 7'b0110000; // 3
4'b0100: data_out = 7'b0011001; // 4
4'b0101: data_out = 7'b0010010; // 5
4'b0110: data_out = 7'b0000011; // 6
4'b0111: data_out = 7'b1111000; // 7
4'b1000: data_out = 7'b0000000; // 8
4'b1001: data_out = 7'b0011000; // 9
4'b1010: data_out = 7'b0001000; // A
4'b1011: data_out = 7'b0000011; // b
4'b1100: data_out = 7'b0100111; // c
4'b1101: data_out = 7'b0100001; // d
4'b1110: data_out = 7'b0000110; // E
4'b1111: data_out = 7'b0001110; // F
default: data_out = 7'b1111111;
endcase
end
else data_out = 7'b1111111;
end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值