您的位置:首页 > 其它

FPGA作业二——verilog设计

2017-10-31 18:05 281 查看

verilog设计实验

verilog设计实验

拼接 4-16译码器

设计M12的计数器

设计M20的计数器

设计先增后减的计数器

拼接 4-16译码器

4-16译码器代码

输入为ain,输出为cout

module Decode4_16(ain,cout);
input[3:0] ain;
output[15:0] cout;
reg[15:0] cout;
always @(ain)
begin
case(ain)
4'b0000: cout=16'b1111111111111110;
4'b0001: cout=16'b1111111111111101;
4'b0010: cout=16'b1111111111111011;
4'b0011: cout=16'b1111111111110111;
4'b0100: cout=16'b1111111111101111;
4'b0101: cout=16'b1111111111011111;
4'b0110: cout=16'b1111111110111111;
4'b0111: cout=16'b1111111101111111;
4'b1000: cout=16'b1111111011111111;
4'b1001: cout=16'b1111110111111111;
4'b1010: cout=16'b1111101111111111;
4'b1011: cout=16'b1111011111111111;
4'b1100: cout=16'b1110111111111111;
4'b1101: cout=16'b1101111111111111;
4'b1110: cout=16'b1011111111111111;
4'b1111: cout=16'b0111111111111111;
default: cout=16'bx;
endcase
end
endmodule


Quartus RTL电路图



译码器波形仿真图

仿真前:



波形仿真后:



设计M=12的计数器

M=12的计数器代码

时钟信号clk、输出信号cntv

module Cnt_12(clk,cntv);
parameter NBITS = 4,MAX=12;
input clk;
output [NBITS-1:0]cntv;
reg [NBITS-1:0]Counter;

always @(posedge clk)
if(Counter < MAX)
Counter <= Counter + 1'b1;
else
Counter <= 0;
assign cntv = Counter;

endmodule


Quantus RTL电路图



计数器波形仿真图

仿真前:



仿真后:





设计M=20的计数器

M=20的计数器

时钟信号clk,输出为cntv,其中Q为移位寄存器的输出

module Cnt_20(clk,cntv);
parameter NBITS = 5,MAX=19;
input clk;
output [NBITS-1:0]cntv;
reg [NBITS<
4000
/span>-1:0]D;
reg [NBITS-1:0]Q;

always @(Q) begin
if(Q < MAX) begin
D = Q + 1'b1;
end
else begin
D = 0;
end
end

always @(posedge clk) begin
Q <= D;
end
assign cntv = Q;

endmodule


Quantus RTL电路图



计数器波形仿真图

仿真前:



仿真后:



设计先增后减的计数器

设计要求

设计一个计数器,从0递增1计数到9,然后递减1计数到0,如此往复|

信号定义

信号名称类型说明
clk时钟信号上升沿有效
cntv输出信号输出数值
C中间变化量判断数值的增减的条件变量
计数器代码

module AD_9(clk,cntv);
parameter NBITS = 4, MAX = 17;
input clk;
output [NBITS-1:0]cntv;
reg [NBITS-1:0]D;
reg [NBITS-1:0]Q;
reg [NBITS:0]C;

always @(posedge clk)
begin
if(C<MAX)begin
C<=C+1'b1;
end
else C<=0;
end

always @(C) begin
if(C < 9) begin
D = Q + 1'b1;
end
else begin
if(C < MAX) begin
D = Q - 1'b1;
end
end
end

always@(posedge clk) begin
Q <= D;
end

assign cntv = Q;
endmodule


Quantus RTL电路图



计数器波形仿真图

仿真前:



仿真后:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fpga