Xilinx FPGA开发实用经验学习(一)

1、同步RS触发器
RS触发器分为同步触发器和异步触发器,二者的区别在于同步触发器有一个时钟端clk,只有在时钟端的信号沿时,触发器的输出才会发生变化。下面是Verilog代码:

module sy_rs_ff(clk,r,s,q,qb)
	input clk,r,s;
	output q,qb;
	reg q;

	assign qb = ~ q;
	always @ (posedge clk) begin
		case ({r,s})
			2'b00 : q <= q;
			2'b01 : q <= 1;
			2'b10 : q <= 0;
			2'b11 : q <= 1'bx;
		endcase
	end
endmodule

他的RTL图可以在Vivado或者ISE上查看,仿真结果比较直观,所以就不放仿真结果图了。

2、同步T触发器
T触发器分为同步触发器和异步触发器,二者的区别在于同步触发器有一个时钟端clk,同步T触发器的逻辑功能为:但时钟沿到来时,如果T=0,则触发器状态保持不变,否则触发器输出端反转。R为复位端,R为高时,输出与时钟无关且Q=0。
Verilog代码如下

module sy_t_ff(clk,r,q,qb)
	input  clk,r;
	output q,qb;
	reg    q;

	assign qb = ~q;
	always @ (posedge clk) begin
		if(r)
			q <= 0;
		else 
			if(t)
				q <= q;
			else 
				q <= ~q;
	end
endmodule

3、同步D触发器
功能为:D输入只能在时序信号clk的沿发生变化时才能被写入到存储器中,替换之前的值,常用于数据延迟以及数据存储模块中。Verilog代码如下:

module sy_d_ff (clk,d,q,qb)
	input  clk,d;
	output q,qb;
	reg q;
assign qb = ~q;
always @ (posedge clk) begin
	q <= d;
end
endmodule

4、同步JK触发器
JK触发器常用于实现计数器。当clk=0时,触发器不工作;当clk=1时,功能如下:当JK为00,01以及10时,实现RS触发器功能;当JK为11时,实现T触发器功能。代码如下:

module sy_jk_ff (clk,j,k,q,qb)
	input  clk,j,k;
	output q,qb;
	reg q;
assign qb = ~q;
always @ (posedge clk) begin
	case({j,k})
		2'b00:q <= q;
		2'b01:q <= 0;
		2'b10:q <= 1;
		2'b11:q <= ~q;
	endcase
end
endmodule

再说一下基本的时序处理模块吧
1、奇数与偶数分频电路
(1)偶数分频电路
偶数倍分频时最简单的一种分频模式,完全可以通过计数器计数实现。比如说要进行N倍偶数分频,那么可由待分频的时钟触发计数器计数,当计数器从0计数到N/2 -1时,输出时钟进行翻转,并给计数器一个复位信号,使下一个时钟从零开始计数,以此循环,便可以实现任意的偶数分频。下面给出一个16分频的电路。

module clk_div16 (clk_in,rst,clk_out)
	input  clk_in,rst;
	output clk_out;
	reg	clk_out;
    reg [2:0] cnt;
    always @ (posedge clk_in) begin
    	if (!rst) begin
    		cnt <= 0;
    		clk_out <= 0;
    	end
    	else
    		if (cnt == 7) begin
    			cnt <= 0;
    			clk_out <= !clk_out;
    		end
    		else begin
    			cnt <= cnt + 1;
    			clk_out <= !clk_out;
    		end
    	end
    endmodule

(2)奇数分频电路
奇数分频有很多方法,说一下常用的错位“异或”法。对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发的模N计数,计数到某一选定值时进行输出时钟的翻转,然后经过(N-1)/2 个时钟再次进行翻转得到一个占空比非50%计数N分频时钟。同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,输出时钟翻转,同样经过(N-1)/2 个时钟时,输出时钟再次翻转生成占空比非50%的计数N分频时钟。两个占空比非50%的N分频时钟相或运算,得到占空比50%的计数N分频时钟。以3分频代码为例:

module clk_div3(clk_in,rst,clk_out)
	input  clk_in,rst;
	output clk_out;
	reg [1:0] cnt,cnt1;
	reg		  clk_1t3p,clk_1t3n;
	always @ (posedge clk_in) begiin
		if (!rst) begin
			cnt <= 0;
			cnt_1t3p <= 0;
		end
		else begin
			if(cnt == 2'b10) begin
				cnt <= 0;
				cnt_1t3p <= cnt_1t3p;
			end
		else begin
			cnt <= cnt + 1;
			cnt_1t3p <= !cnt_1t3p;
			end
		end
	end
	always @ (negedge clk_in) begin
		 if (!rst) begin
		 	cnt1 <= 0;
		 	clk_1t3n <= 0;
		 end
		 else begin
		 	if(cnt1 == 2'b10) begin
		 		cnt1 <= 0;
		 		clk_1t3n <= clk_1t3n;
		 	end
		 	else begin
		 		cnt1 <= cnt1 + 1;
		 		clk_1t3n <= !clk_1t3n;
		 	end
		 end
	end

	assign clk_out = clk_1t3p|clk_1t3n;
endmodule
		 		

2、同步采样模块
在实际的应用中,外部输入的异步信号需要经过系统时钟的同步化,且将输入的异步信号转化成一个时钟长的脉冲信号。给一个Verilog代码看看吧。

module clk_syn(clk,rst,s_in,s_out)
	input	clk,rst,s_in;
	output  s_out;
	reg s_out;
	reg s_t1,s_t2;
	always @(posedge clk) begin 
		if (!rst) begin
			s_t1 <= 0;
			s_t2 <= 0;
		end
		else begin
			s_t1 <= s_in;
			s_t2 <= s_t1;
		end
	end

	assign s_out = s_t1 & (!s_t2);
endmodule 
			 

可以自己拿代码去Vivado或者Modelsim上运行一下看一下波形,仿真测试代码比较简单,我就不浪费时间了。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xilinx FPGA开发实用教程原书附赠光盘资源 本光盘是《Xilinx FPGA开发实用教程(第2版)》一书的配书光盘,内容包括了书中第2章、第4章、第6章到第10章所有设计案例的完整工程文件。 本光盘根目录下有7个文件夹,文件夹的内容和含义说明如下: 1. chapt2文件夹中的内容为书中第2章完整的工程文件,包括2个子文件夹: (1) exp2_29:例2-29对应的文件; (2) exp2_30:例2-30对应的文件。 2. chapt4文件夹中的内容为书中第4章完整的工程文件,包括4个子文件夹: (1) exp4_1:例4-1对应的文件; (2) exp4_2:例4-2对应的文件; (3) exp4_6:例4-6对应的文件; (4) exp4_7:例4-7对应的文件。 3. chapt6文件夹中的内容为书中第6章完整的工程文件,包括10个子文件夹: (1) exp6_1:例6-1对应的文件; (2) exp6_2:例6-2对应的文件; (3) exp6_6:例6-6对应的文件; (4) exp6_8:例6-8对应的文件; (5) exp6_8_matlab:例6-8对应的matlab文件; (6) exp6_9:例6-9对应的文件; (7) exp6_12:例6-12对应的文件; (8) exp6_13:例6-13对应的文件; (9) exp6_18:例6-18对应的文件; (10) exp6_Uart:UART接口开发实例。 4. chapt7文件夹中的内容为书中第7章完整的工程文件,包括2个子文件夹: (1) exp_sdk_C_code:包括4个子文件夹: led_cpp:LED代码; uart_cpp:串口代码; intc_uart:中断和串口联合的代码; timer_intc:定时器和中断联合的代码。 (2) exp7_2:例7-2对应的文件。 5. chapt8文件夹中的内容为书中第8章完整的工程文件,包括6个子文件夹: (1) exp8_1:例8-1对应的文件; (2) exp8_2:例8-2对应的文件; (3) exp8_3:例8-3对应的文件; (4) exp8_4:例8-4对应的文件; (5) exp8_5:例8-5对应的文件; (6) exp8_hwcosim:硬件协仿真的例子。 6. chapt9文件夹中的内容为书中第9章完整的工程文件,包括5个子文件夹: (1) exp9_1:例9-1对应的文件; (2) exp9_2:例9-2对应的文件; (3) exp9_3:例9-3对应的文件; (4) exp9_4:例9-4对应的文件; (5) exp9_5:例9-5对应的文件。 7. chapt10文件夹中的内容为书中第10章完整的工程文件,包括1个子文件夹: (1) exp10_1:例10-1对应的文件; (2) xapp869:Xilinx PCI-E参考文档。
本光盘是《Xilinx FPGA开发实用教程(第2版)》一书的配书光盘,内容包括了书中第2章、第4章、第6章到第10章所有设计案例的完整工程文件。 本书由徐文波 田耘 编著 清华大学出版社出版 2012年7月第二版 压缩包大小23.6兆,解压后大小为99.6兆,占用空间106兆 本光盘根目录下有7个文件夹,文件夹的内容和含义说明如下: 1. chapt2文件夹中的内容为书中第2章完整的工程文件,包括2个子文件夹: (1) exp2_29:例2-29对应的文件; (2) exp2_30:例2-30对应的文件。 2. chapt4文件夹中的内容为书中第4章完整的工程文件,包括4个子文件夹: (1) exp4_1:例4-1对应的文件; (2) exp4_2:例4-2对应的文件; (3) exp4_6:例4-6对应的文件; (4) exp4_7:例4-7对应的文件。 3. chapt6文件夹中的内容为书中第6章完整的工程文件,包括10个子文件夹: (1) exp6_1:例6-1对应的文件; (2) exp6_2:例6-2对应的文件; (3) exp6_6:例6-6对应的文件; (4) exp6_8:例6-8对应的文件; (5) exp6_8_matlab:例6-8对应的matlab文件; (6) exp6_9:例6-9对应的文件; (7) exp6_12:例6-12对应的文件; (8) exp6_13:例6-13对应的文件; (9) exp6_18:例6-18对应的文件; (10) exp6_Uart:UART接口开发实例。 4. chapt7文件夹中的内容为书中第7章完整的工程文件,包括2个子文件夹: (1) exp_sdk_C_code:包括4个子文件夹: led_cpp:LED代码; uart_cpp:串口代码; intc_uart:中断和串口联合的代码; timer_intc:定时器和中断联合的代码。 (2) exp7_2:例7-2对应的文件。 5. chapt8文件夹中的内容为书中第8章完整的工程文件,包括6个子文件夹: (1) exp8_1:例8-1对应的文件; (2) exp8_2:例8-2对应的文件; (3) exp8_3:例8-3对应的文件; (4) exp8_4:例8-4对应的文件; (5) exp8_5:例8-5对应的文件; (6) exp8_hwcosim:硬件协仿真的例子。 6. chapt9文件夹中的内容为书中第9章完整的工程文件,包括5个子文件夹: (1) exp9_1:例9-1对应的文件; (2) exp9_2:例9-2对应的文件; (3) exp9_3:例9-3对应的文件; (4) exp9_4:例9-4对应的文件; (5) exp9_5:例9-5对应的文件。 7. chapt10文件夹中的内容为书中第10章完整的工程文件,包括1个子文件夹: (1) exp10_1:例10-1对应的文件; (2) xapp869:Xilinx PCI-E参考文档。 二、运行环境 本光盘的所有程序在以下环境调试通过: (1)Windows XP; (2)Xilinx ISE Design Suite 13.2 for windows; 更详细的信息可以参考本教材中实验部分的相关说明。 三、注意事项 (1)运行这些程序前请详细阅读本教程中相关实验部分说明; (2)部分实验清理了综合与实现所产生的相关文件以节省空间,读者重新运行即可。 (3)在使用光盘的程序时,请将程序拷贝到硬盘上,并去除文件的只读属性; (4)需要说明的是,当在本地电脑上运行例子时,根据例子所运行的目录,对例子中的一些目录路径进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值