例5:奇偶校验位产生器 module parity(even_bit,odd_bit,input_bus); output even_bit,odd_bit; input[7:0] input_bus; assign odd_bit = ^ input_bus; //产生奇校验位 assign even_bit = ~odd_bit; //产生偶校验位 endmodule 例6:同步置数、同步清零的计数器 module count(out,data,load,reset,clk); output[7:0] out; input[7:0] data; input load,clk,reset; reg[7:0] out; always @(posedgeclk) //clk 上升沿触发 begin if (!reset) out = 8'h00;//同步清0,低电平有效 else if (load)out = data; //同步预置 else out = out + 1; //计数 end endmodule 例7:实现2 个8 位数相乘 module mult_for(outcome,a,b); parameter size=8; input[size:1] a,b; //两个操作数 output[2*size:1] outcome; //结果 reg[2*size:1] outcome; integer i; always @(a orb) begin outcome=0; for(i=1; i<=size;i=i+1) //for 语句 if(b) outcome=outcome+(a << (i-1)); end endmodule 例8:带异步清0、异步置1 的D 触发器 module DFF1(q,qn,d,clk,set,reset); input d,clk,set,reset; output q,qn; reg q,qn; always @(posedge clk or negedge set or negedge reset) begin if (!reset)begin q <= 0; //异步清0,低电平有效 qn <= 1; end else if (!set) begin q <= 1; //异步置1,低电平有效 qn <= 0; end else begin q <= d; qn <= ~d; end end endmodule 例9:8 位移位寄存器 module shifter(din,clk,clr,dout); input din,clk,clr; output[7:0] dout; reg[7:0] dout; always @(posedgeclk) begin if (clr) dout<=8'b0; //同步清0,高电平有效 else begin dout<= dout << 1; //输出信号左移一位 dout[0]<= din; //输入信号补充到输出信号的最低位 end end endmodule 例10: 偶分频 偶分频比较简单,假设为N分频,只需计数到N/2-1,然后时钟翻转、计数清零,如此循环就可以得到N(偶)分频。代码如下。 module fp_even(clk_out,clk_in,rst); output clk_out; input clk_in; input rst; reg [1:0] cnt; reg clk_out; parameter N=6; always @ (posedge clk_in or negedge rst) begin if(!rst) begin cnt<= 0; clk_out<= 0; end else begin if(cnt==N/2-1) beginclk_out <= !clk_out; cnt<=0; end else cnt<= cnt + 1; end end endmodule |