TAG
- F P G A 、 V e r i l o g FPGA、Verilog FPGA、Verilog
- // – 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