上手verilog基础代码与modelsim仿真(一)
1.点亮led灯
输入输出波形图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-blog.csdnimg.cn/16766bb0cf8949489b51b82866de9269.png)
verilog代码:
module led
(
input wire key_in,
output wire led_out
);
assign led_out = key_in;
endmodule
2.二选一Mux
输入输出波形图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DBchy6pR-1670394675007)(C:\Users\zhangbo\AppData\Roaming\Typora\typora-user-images\image-20221207105059757.png)]](https://img-blog.csdnimg.cn/93d50bed51c648a081636ff25819ad4f.png)
verilog代码:
module mux2_1
(
input wire [0:0] in_1,
input wire [0:0] in_2, //input signal
input wire [0:0] sel, //select signal
output reg out //output signal
);
always@(sel,in_1,in_2) //or *
if (sel==1'b1)
out = in_1;
else
out = in_2;
endmodule
3. 3-8译码器
输入输出波形图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRMQwLiK-1670394675008)(C:\Users\zhangbo\AppData\Roaming\Typora\typora-user-images\image-20221207105439585.png)]](https://img-blog.csdnimg.cn/560cc8bdc65a4c32a748d3a3a743eded.png)
verilog代码:
完成译码功能:
module decoder(
input wire in_1,
input wire in_2,
input wire in_3,
output reg [7:0] out
);
always@(*)
case({in_1,in_2,in_3})
3'b000: out=8'b0000_0001;
3'b000: out=8'b0000_0001;
3'b001: out=8'b0000_0010;
3'b010: out=8'b0000_0100;
3'b011: out=8'b0000_1000;
3'b100: out=8'b0001_0000;
3'b101: out=8'b0010_0000;
3'b110: out=8'b0100_1000;
3'b111: out=8'b1000_0000;
default:out=8'b0000_0001;
endcase
endmodule
仿真逻辑文件:
`timescale 1ns/1ns
module td_decoder();
reg in_1;
reg in_2;
reg in_3;
wire [7:0] out;
initial
begin
in_1 <= 1'b0;
in_2 <= 1'b0 ;
in_3 <= 1'b0 ;
end
always #10 in_1 <= {$random} % 2;
always #10 in_2 <= {$random} % 2;
always #10 in_3 <= {$random} % 2;
initial
begin
$timeformat(-9,0,"ns",6);
$monitor("@time %t:in_1=%b,in_2=%b,in_3=%b,out=%b",$time,in_1,in_2,in_3,out);
end
decoder decoder_inst
(
.in_1(in_1),
.in_2(in_2),
.in_3(in_3),
.out (out)
);
endmodule
仿真波形图:
![img](https://img-blog.csdnimg.cn/692f32531e8f4602adc89dee58656acd.png)
4.半加器
输入输出波形图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tlbxWZ2r-1670394675009)(C:\Users\zhangbo\AppData\Roaming\Typora\typora-user-images\image-20221207142639406.png)]](https://img-blog.csdnimg.cn/6059075a43f34fe09e78cd04cec20938.png)
verilog完成半加器功能
module half_adder(
input wire in_1,
input wire in_2,
output wire sum,
output wire count
);
assign {count,sum} = in_1 + in_2;
endmodule
仿真逻辑文件
module half_adder(
input wire in_1,
input wire in_2,
output wire sum,
output wire count
);
assign {count,sum} = in_1 + in_2;
endmodule
仿真波形图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2fqUEH5-1670394675010)(C:\Users\zhangbo\AppData\Roaming\Typora\typora-user-images\image-20221207142943125.png)]](https://img-blog.csdnimg.cn/ce53e5ebaa8a450f9817a532e7c1750b.png)