实验1:设计4-16译码器
方法一:行为描述方式——使用CASE语句
1.代码
module decoder4_16A(out,in);
output[15:0] out;
input[3:0] in;
reg[15:0] out;//out为16位寄存器
always @(in) //循环输入
begin
case(in)
//输入4位十进制数,输出16位二进制数
4'd0: out=16'b1111111111111110;
4'd1: out=16'b1111111111111101;
4'd2: out=16'b1111111111111011;
4'd3: out=16'b1111111111110111;
4'd4: out=16'b1111111111101111;
4'd5: out=16'b1111111111011111;
4'd6: out=16'b1111111110111111;
4'd7: out=16'b1111111101111111;
4'd8: out=16'b1111111011111111;
4'd9: out=16'b1111110111111111;
4'd10: out=16'b1111101111111111;
4'd11: out=16'b1111011111111111;
4'd12: out=16'b1110111111111111;
4'd13: out=16'b1101111111111111;
4'd14: out=16'b1011111111111111;
4'd15: out=16'b0111111111111111;
endcase
end
endmodule
2.RTL视图
3.仿真波形
方法二:数据流描述方式——使用assign语句
1.代码
module decoder4_16B(in,out,enable);
input[3:0] in;
input enable;
output[15:0] out;
wire [15:0] out;
assign out=~((enable)?(1<<in):16'b0);
/*enable=0时不工作,out=16'b0,enable=1时,out=in左移一位后的值,用16位二进制数表示*/
endmodule
2.RTL视图
3.仿真波形
实验2:设计M=12的计数器
设计要求:设计一个M=12的计数器,上电后对CLK信号,从0顺序计数到11,然后回绕到0,当计数值为11的CLK周期,溢出信号OV输出一个高电平,其他周期OV信号输出0。
1.代码
module RingCounter_M12(out,count,clk);
output [3:0]out;
output count;
input clk;
reg [3:0] out;
reg count;
always@(posedge clk)//clk上升沿触发
begin
count<=1'b0;
if(out==11)
begin
count<=1'b1;
out<=4'b0;
end
else
out<=out+1;
end
endmodule
2.RTL视图
3.仿真波形
实验3:设计M=20的计数器
设计要求:设计一个M=20的计数器,上电后对CLK信号,从0顺序计数到19,然后回绕到0 当计数值为19的CLK周期,溢出信号OV输出一个高电平,其他周期OV信号输出0
1.代码
module RingCounter_M20(out,count,clk);
output [4:0]out;
output count;
input clk;
reg [4:0] out;
reg count;
always@(posedge clk)//clk上升沿触发
begin
count<=1'b0;
if(out==19)
begin
count<=1'b1;
out<=4'b0;
end
else
out<=out+1;
end
endmodule
2.RTL视图
3.仿真波形
实验4:设计可预置加减计数器
设计要求:设计一个计数器,从0递增1计数到9,然后递减1计数到0,如此往复。
1.代码
module UpDown_M9(out,count,clk);
input clk;
output [3:0]out;
output count;
reg [3:0] out;
reg count=1;
always@(posedge clk)begin //clk上升沿触发
case(count)
2'b1: //count=1时递加,且加至9时count取反变0
begin
out<=out+1;
if (out==8)
count=~count;
end
2'b0: //count=0时递减,且减至0时count取反变1
begin
out<=out-1;
if (out==1)
count=~count;
end
endcase
end
endmodule
2.RTL视图
3.仿真波形