FPGA - 231116 - 第四章 - 硬件描述语言Verilog HDL

  • TAG - F P G A 、 V e r i l o g FPGA、Verilog FPGAVerilog

  • // – 4.1 – //
  • 系统级、算法级、RTL级、门级、开关级
  • //
  • 三人表决电路
module Vote3(
	input a,b,c,
	output f
);

assign f = (a&b) | (a&c) | (b&c) ;

endmodule 
  • 4位二进制加法器
module Add_4bin(
	input cin,
	input [3:0] a,b,
	output cout,
	output [3:0] c
);

assign {cout,c} = a + b + cin;

endmodule 
  • 4位二进制加法计数器
module Count_4bin(
	input CLK,CLR_,
	output reg [3:0] out
);

always @(posedge CLK) begin
	if (!CLR_)  out = 4'b 0000;
	else		out = out + 1'b 1;
end

endmodule 
  • 基本D触发器
module FF_D(
	input CLK,
	input D,
	output reg Q
);

always @(posedge CLK)
	Q = D;

endmodule 
  • 带同步清0/同步置1(低电平有效)的D触发器
module FF_D(
	input CLK,set,set_,
	input D,
	output reg Q,Q_
);

always @(posedge CLK) begin
	if (!set) begin Q = 1'b 1; Q_ = 1'b 0; end
	else if (!set_) begin Q = 1'b 0; Q_ = 1'b 1; end
	else begin Q = D; Q_ = ~D; end
end

endmodule 
  • // – 4.2 – //
  • x 表示不定值,z 表示高阻值;?z 的另一种表示符号,建议在case语句中使用。
  • parameter 常量
  • 模块例化
  • reg 型变量既可生成触发器,也可生成组合逻辑;wire 型变量只能生成组合逻辑。
  • 寄存器和存储器
  • ===== 的区别
  • 在位拼接表达式中,不允许存在没有指明位数的信号,必须指明信号的位数;若未指明,则默认为32位的二进制数!如 {1,0} = 64'h00000001_00000000,注意 {1,0} != 2'b10
  • // – 4.3 – //
  • begin_end 语句:顺序执行
  • fork_join 语句:并行执行
  • //
  • 模为60的BCD码加法计数器
module MOD_BCD_60(
	input CLK,CLR_,set_,cin,
	input [7:0] set_data,
	output cout,
	output reg [7:0] out
);

reg f = 0;

always @(posedge CLK) begin
	if (f) f = 0;

	if (!CLR_) out = 0;
	else if (!set_) out = set_data;
	else if (cin) begin
		out[3:0] = out[3:0] + 1;
		if (out[3:0] == 10) begin
			out[3:0] = 0;
			out[7:4] = out[7:4] + 1;
			if (out[7:4] == 6) begin
				out[7:4] = 0;
				f = 1;
			end
		end
	end
end

assign cout = f ? 1 : 0 ;

endmodule 
  • // – 4.4 – //
  • 用for语句描述的7人投票表决器
<占个坑>
  • 用for语句实现两个8位二进制数乘法
<占个坑>
  • 用while语句对一个8位二进制数中值为1的位进行计数
<占个坑>
  • 用for语句对一个8位二进制数中值为1的位进行计数
<占个坑>
  • 通过任务调用完成4个4位二进制输入数据的冒泡排序
<占个坑>
  • 利用函数对一个8位二进制数中为0的位进行计数
<占个坑>
  • 阶乘运算函数
<占个坑>
  • 任务与函数的区别
  • // – 4.5 – //
  • ‵define
  • ‵include
  • ‵timescale <时间单位> / <时间精度>
  • //
  • always 模块内:语句顺序执行。
  • 在不同的 always 模块间:模块并行执行。
  • // – 4.6 – //
  • 1

参考示意图


参考链接


作者 | 乐意奥AI

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值