⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 count4a.abl

📁 自己编写的GAL可编程逻辑电路的编译软件abel4的windows界面
💻 ABL
字号:
module COUNT4A  
title '4-bit counter with 2 input mux       9 Aug 1990
based on an example by Birkner/Coli in the MMI PAL Handbook
Lisa Matheson   Data I/O Corp.'

	count4a	 device 'P16R4';

	Clk,OC,CO,I1,I0,CI	pin  1,11,12,13,18,19;
	A0,A1,A2,A3,B0,B1,B2,B3	pin  2,3,4,5,6,7,8,9;
	Q3,Q2,Q1,Q0		pin  14,15,16,17;

	H,L,X,Z,C		= 1,0, .X.,.Z.,.C.;
	InputA			= [A3,A2,A1,A0];
	InputB			= [B3,B2,B1,B0];
	Output			= [CO,Q3,Q2,Q1,Q0];
	Mode			= [I1,I0];
	Hold,LoadA,LoadB,Incr	= 0,1,2,3;	" define Modes

equations	" global 
	[Q3..Q0].clk = Clk;
	[Q3..Q0].oe  = !OC;

equations	" input multiplexer

	!Q0	:= (Mode==Hold ) & !Q0
		 # (Mode==LoadA) & !A0
		 # (Mode==LoadB) & !B0;

	!Q1 	:= (Mode==Hold ) & !Q1 
		 # (Mode==LoadA) & !A1 
		 # (Mode==LoadB) & !B1;

	!Q2 	:= (Mode==Hold ) & !Q2 
		 # (Mode==LoadA) & !A2 
		 # (Mode==LoadB) & !B2;

	!Q3 	:= (Mode==Hold ) & !Q3 
		 # (Mode==LoadA) & !A3 
		 # (Mode==LoadB) & !B3;

	" 4 bit counter

	!Q0	:= (Mode==Incr ) & !CI & !Q0		"Hold if no carry
		 # (Mode==Incr ) &  CI &  Q0 ;

	!Q1	:= (Mode==Incr ) & !CI & !Q1		"Hold if no carry
		 # (Mode==Incr ) & !Q0 & !Q1		"Hold if Q0=L
		 # (Mode==Incr ) &  CI &  Q0 &  Q1 ;

	!Q2	:= (Mode==Incr ) & !CI & !Q2		"Hold if no carry
		 # (Mode==Incr ) & !Q0 & !Q2		"Hold if Q0=L
		 # (Mode==Incr ) & !Q1 & !Q2		"Hold if Q1=L
		 # (Mode==Incr ) &  CI &  Q0 &  Q1 &  Q2 ;

	!Q3	:= (Mode==Incr ) & !CI & !Q3		"Hold if no carry
		 # (Mode==Incr ) & !Q0 & !Q3		"Hold if Q0=L
		 # (Mode==Incr ) & !Q1 & !Q3		"Hold if Q1=L
		 # (Mode==Incr ) & !Q2 & !Q3		"Hold if Q2=L
		 # (Mode==Incr ) &  CI &  Q0 &  Q1 &  Q2 &  Q3 ;

	!CO 	= !CI # !Q0 # !Q1 # !Q2 # !Q3 ;
@page
test_vectors  ' test Load A and B'
       ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
	[ C, L, LoadA,  ^h0  ,  ^hF  ,X  ] -> ^h0;
	[ C, L, LoadB,  ^h0  ,  ^hF  ,L  ] -> ^hF;
	[ C, L, LoadA,  ^h1  ,  ^h7  ,X  ] -> ^h1;
	[ C, L, LoadB,  ^h1  ,  ^h7  ,X  ] -> ^h7;
	[ C, L, LoadA,  ^h2  ,  ^hB  ,X  ] -> ^h2;
	[ C, L, LoadB,  ^h2  ,  ^hB  ,X  ] -> ^hB;
	[ C, L, LoadA,  ^h4  ,  ^hD  ,X  ] -> ^h4;
	[ C, L, LoadB,  ^h4  ,  ^hD  ,X  ] -> ^hD;
	[ C, L, LoadA,  ^h8  ,  ^hE  ,X  ] -> ^h8;
	[ C, L, LoadB,  ^h8  ,  ^hE  ,X  ] -> ^hE;
	[ C, L, LoadA,  ^h0  ,  ^hF  ,X  ] -> ^h0;
	[ C, L, LoadB,  ^h0  ,  ^hF  ,L  ] -> ^hF;

test_vectors  ' test increment'
       ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
	[ C, L, LoadB,   X   ,  ^h1  ,X  ] -> ^h1;
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^h2;
	[ C, L, LoadB,   X   ,  ^h3  ,X  ] -> ^h3;
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^h4;
	[ C, L, LoadA,  ^h7  ,   X   ,X  ] -> ^h7;
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^h8;
	[ C, L, LoadA,  ^hF  ,   X   ,L  ] -> ^hF;
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^h0;	"roll over
	[ C, L, LoadB,   X   ,  ^hC  ,X  ] -> ^hC;
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^hD;
	[ C, L, Hold ,   X   ,   X   ,H  ] -> ^hD;

test_vectors  ' test carry'
       ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^hE;
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^h1F;	"carry out
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^h0;	"roll over
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^h1;
	[ C, L, Incr ,   X   ,   X   ,L  ] -> ^h1;	"no carry in
	[ C, L, Incr ,   X   ,   X   ,H  ] -> ^h2;
	[ L, H, Hold ,   X   ,   X   ,X  ] -> [X,Z,Z,Z,Z];
end COUNT4A  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -