Verilog基本概念
了解Verilog HDL程序的框架
刷题推荐
链接: Verilog刷题
常用Verilog语法(3)
条件语句
1、if_else语句
if(index > 0)
begin
for(scani = 0;scani < index;scani = scani+1)
if(memory[scani] > 0)
begin
$display("...");
memory[scani] = 0;
end
end
else
$display("error-indexiszero");
2、case语句
reg[15:0] rega;
reg[9:0] result;
case(rega)
16'd0: result = 10'b0111111111;
16'd1: result = 10'b1011111111;
16'd2: result = 10'b1101111111;
16'd3: result = 10'b1110111111;
.
.
.
default:result = 10'bx;
endcase
Verilog HDL针对电路的特性提供了case语句的其他两种形式,即casez和casex,其中casez语句用来处理不考虑高阻值z的比较过程,casex语句不考虑高阻值z和不定值。
reg[7:0] ir;
casez(ir)
8'b1???????:instructionl(ir);
8'b01??????:instructionl(ir);
8'b00001???:instructionl(ir);
8'b000010??:instructionl(ir);
endcase
reg[7:0] r,mask;
mask = 8'bx0x0x0x0;
casex(r^mask)
8'b001100xx:stat1;
8'b1100xx00:stat2;
8'b00xx0011:stat3;
8'bxx001100:stat4;
endcase
循环语句
在Verilog HDL中存在4种类型的循环语句。
1)forever:连续的执行语句;
2)repeat:连续执行一条语句n次;
3)while
4)for
1、forever语句
格式:
forever 语句;
forever begin 多条语句 end
forever常用于产生周期性的波形,作为仿真测试信号,不能独立写在程序中,必须写在initial块中。
2、repeat语句
parameter size = 8,longsize = 16;
reg[size:1] opa,opb;
reg[longsize:1] result;
begin:mult
reg[longsize:1] shift_opa,shift_opb;
shift_opa = opa;
shift_opb = opb;
result = 0;
repeat(size)
begin
if(shift_opb[1])
result = result + shift_opa;
shift_opa = shift_opa << 1;
shift_opb = shift_opb >> 1;
end
end
3、while语句
begin:countls
reg[7:0] tempreg;
count = 0;
tempreg = rega;
while(tempreg)
begin
if(tempreg[0]) count = count + 1;
tempreg = tempreg >> 1;
end
end
4、for语句
begin:init_mem
reg[7:0] tempi;
for(tempi = 0;tempi < memsize;tempi = tempi + 1)
memory[tempi] = 0;
自学Verilog(五)链接: 常用Verilog语法(4)
这里是引用《Verilog数字系统设计教程》——夏宇闻