目录
微信公众号获取更多FPGA相关源码:

1.if 和 if-else 语句:
- 可以多层嵌套。在嵌套if序列中,else和前面最近的if相关。
- 为提高可读性及确保正确关联,使用begin…end块语句指定其作用域。
描述方式:
if (表达式)
begin
……
end
else
begin
……
end
举例:
always #20
if (index > 0) // 开始外层 if
if (rega > regb) // 开始内层第一层 if
result = rega;
else
result = 0; // 结束内层第一层 if
else
if (index == 0)
begin
$display(" Note : Index is zero");
result = regb;
end
else
$display(" Note : Index is negative");
2.条件语句(case分支语句)
在Verilog中重复说明case项是合法的,因为Verilog的case语句只执行第一个符合项。
case语法:
case <表达式>
<表达式>:赋值语句或空语句;
<表达式>:赋值语句或空语句;
default:赋值语句或空语句;
module compute (result, rega, regb, opcode);
input [7: 0] rega, regb;
input [2: 0] opcode;
output [7: 0] result;
reg [7: 0] result;
always @( rega or regb or opcode)
case (opcode)
3'b000 : result = rega + regb;
3'b001 : result = rega - regb;
3‘b010 : // specify multiple cases with the same result
3'b100 : result = rega / regb;
default : begin
result = 'bx;
$display (" no match");
end
endcase
endmodule
case语句是测试表达式与另外一系列表达式分支是否匹配的一个多路条件语句:
- Case语句进行逐位比较以求完全匹配(包括x和z)。
- Default语句可选,在没有任何条件成立时执行。此时如果未说明default,Verilog不执行任何动作。
- 多个default语句是非法的。
重要内容: - 使用default语句是一个很好的编程习惯,特别是用于检测x和z。
- Casez和casex为case语句的变体,允许比较无关(don‘t-care)值。
- case表达式或case项中的任何位为无关值时,在比较过程中该位不予考虑。
1. 在casez语句中,? 和 z 被当作无关值。
2. 在casex语句中,?,z 和 x 被当作无关值。
3.循环(looping)语句
有四种循环语句:
- repeat:将一块语句循环执行确定次数。
repeat (次数表达式) <语句>
- while:在条件表达式为真时一直循环执行
while (条件表达式) <语句>
- forever:重复执行直到仿真结束
forever <语句> (不可综合)
- for:在执行过程中对变量进行计算和判断,在条件满足时执行
for(赋初值;条件表达式;计算) <语句>
3.1 repeat (次数表达式) 语句举例
// Parameterizable shift and add multiplier
module multiplier( result, op_a, op_b);
parameter size = 8;
input [size:1] op_a, op_b;
output [2* size:1] result;
reg [2* size:1] shift_opa, result;
reg [size:1] shift_opb;
always @( op_a or op_b) begin
result = 0;
shift_opa = op_a; // 零扩展至16位
shift_opb = op_b;
repeat (size) begin
#10 if (shift_opb[1]) result = result + shift_opa;
shift_opa = shift_opa << 1; // Shift left
shift_opb = shift_opb >> 1; // Shift right


696

被折叠的 条评论
为什么被折叠?



