Wednesday, May 27, 2009

இலக்க இலத்திரனியல் 2 - R-S எழுவிழுவி (Digital Electronics 2 - R-S Flip Flop

R-S எழுவிழுவி ஆனது அனைத்து வரிசை ஏரண சுற்றுக்களிற்கும் அடிப்படையான வரிசை ஏரண சுற்றாகும். இதிலிருந்தே ஏனைய வரிசை ஏரண சுற்றுக்கள் கட்டமைக்கப்படுகிறன. R-S எழுவிழுவியானது 1 பிட் கொள்ளளவை சேமித்து வைக்கும். இந்த எழுவிழுவியானது 2 NAND படலைகள் அல்லது 2 NOR படலைகளைக் கொண்டு உருவாக்கப்படும்.

தொடரும் ....

Monday, December 15, 2008

இலக்க இலத்திரனியல் 1 - சேர்மான மற்றும் வரிசை ஏரண சுற்றுக்கள் (Digital Electronics 1 - Combinational and Sequential Logic Circuits)

அடிப்படையில் இலக்க இலத்திரனியல் சுற்றுகள் பொதுவாக இரு வகைப்படும்.

1 . சேர்மான ஏரண சுற்றுக்கள் (Combinational Logic Circuits)
2 . வரிசை ஏரண சுற்றுக்கள் (Sequential Logic Circuits)

சேர்மான ஏரண சுற்றுக்களெனப்படுவது சாதாரண AND, OR, NOT etc போன்ற ஏரண சுற்றுக்களை தேவைக்கு ஏற்றபடி கூட்டாக சேர்த்து உருவாக்கப்படுவது ஆகும். வரிசை ஏரண சுற்றுக்களெனப்படுவது பல எழுவிழுவிகளை (Flip Flop) ஒன்றாக சேர்த்து உருவாக்கப்படுவது ஆகும். சேர்மான ஏரண சுற்றுக்களிற்கு ஒரு நல்ல உதாரணம் குறியீட்டாகி (Encoder). கீழே அதன் படம் காட்டப்பட்டு உள்ளது.


Picture Ref - http://scitec.uwichill.edu.bb/cmp/online/P10F/encoders.htm

இலத்திரனியலில் பல வகைப்பட்ட குறியீட்டாகிகள் உண்டு. மேலே காட்டப்பட்ட சுற்று 8-3 குறியீட்டாகி எனப்படும். இச் சுற்றுக்கு 8 உள்ளீடுகளில் (Input) ஏதாவது ஒரு உள்ளீட்டிற்கு இரும நிலை (Binary Logic State) 1 இனை கொடுக்கும் போது, வெளியீடாக (Output) அதன் இரும இலக்கதை தரும். கீழே உள்ள அட்டவணையில் இது விளக்கப்பட்டு உள்ளது.


Picture Ref - http://scitec.uwichill.edu.bb/cmp/online/P10F/encoders.htm

மேலுள்ள சுற்று இங்கே காட்டப்பட்டதன் நோக்கம் சேர்மான ஏரண சுற்றுகள் எவ்வாறு வரிசை ஏரண சுற்றுகளிலிருந்து வேறுபடுகிறது என்பதை காட்டுவதற்கு ஆகும். மேலுள்ள சுற்று எவ்வாறு வரிசை ஏரண சுற்றுகளிலிருந்து வேறுபட்டு சேர்மான ஏரண சுற்றாக காட்டப்பட்டுள்ளது எனில் சுற்றிற்கு உள்ளீடு செய்தவுடன் அதே கணத்தில் வெளியீட்டில் தகவல் இரும நிலைக்கு குறியீட்டாக்கப்பட்டு கிடைத்துவிடும். அத்துடன் தகவலை உள்ளீட்டிலிருந்து மாற்றியவுடன் அதே கணத்தில் வெளியீட்டிலும் தகவல் மாற்றம் அடைந்துவிடும். இங்கே சேர்மான ஏரண சுற்று எவ்வாறு வரிசை ஏரண சுற்றிலிருந்து வேறுபடுகிறது எனில் சுற்றிற்கு உள்ளீடு செய்தவுடன் அதே கணத்தில் வெளியீட்டும் கிடைக்கும். அத்துடன் தகவலை உள்ளீட்டிலிருந்து மாற்றியவுடன் அதே கணத்தில் வெளியீட்டிலும் தகவல் மாற்றம் அடைந்துவிடும். வரிசை ஏரண சுற்று அப்படியல்ல. வரிசை ஏரண சுற்றில் நேரத்துடன் படிப்படியாகவே வெளியீடு பெறப்படும். அத்துடன் உள்ளீட்டில் தகவல் மாற்றப்பட்டாலும் வெளியீட்டில் தகவலை மாற்றமடையாமல் நினைவகப்படுத்தி (Momorized) வைத்திருக்க முடியும்.

வரிசை ஏரண சுற்றானது அதன் உள்ளீட்டில் கொடுக்கப்படும் தகவலுக்கு ஏற்ப படிப்படியாகவோ அல்லது அதே கணத்திலோ வெளியீட்டை கொடுக்கும். கீழே காட்டப்பட்டுள்ள படத்தின் மூலம் இதனை புரிந்து கொள்ளவும்.



Picture Ref - http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/45-misc/30-uart/reg8_print.html

மேலே காட்டப்பட்டுள்ள சுற்று ஒரு வரிசை ஏரண சுற்றாகும். இது 8 பிட் பதிவகம் (8 bit Register) எனப்படும். இது செயலி (microprocessor) அடங்கலாக அனைத்து இலக்க இலத்திரனியல் சில்லுகளிலும் பிரதான சுற்றுக்களில் ஒன்றாக இருக்கும். இதன் பயன்பாடு என்னவெனில், இது 8 பிட் இரும கொள்ளளவை சேமித்து வைத்திருக்கும் (மின்சாரம் சுற்றிற்கு கொடுக்கப்பட்டுள்ளவரை).

மேலே காட்டப்பட்டுள்ள படத்தில் D0 - D7 வரை 8 பிட் உள்ளீடு எனப்படும். Q0 - Q7 வரை 8 பிட் வெளியீடு எனப்படும்.

CLK எனப்படுவது இந்த பதிவக சுற்றை உயிர்ப்பு (active) நிலைக்கு கொண்டுவரும் குறிப்பு (signal) ஆகும். இதன் இயக்கம் என்னவெனில், இதன் உள்ளீடுகளான D0 - D7 வரை கொடுக்கப்படும் தகவலை இதன் வெளியீடான Q0 - Q7 வரை சேமித்து வைத்திருக்கும் (அதாவது D0 -> Q0, D1 -> Q1, ....., D7 -> Q7). இதனை எவ்வாறு பயன்படுத்துவது என்றால், இந்த சுற்றுக்கு CLK உள்ளீட்டிற்கு இரும நிலை 1 கொடுக்கப்படும்போது மட்டும், இதன் ஊள்ளீடுகளான D0 - D7 வரை கொடுக்கப்படும் தகவலை வெளியீடான Q0 - Q7 வரை தரும். இப்போது CLK உள்ளீட்டை 0 இற்கு மாற்றினால், D0 - D7 வரை உள்ள ஊள்ளீடை எப்படி மாற்றினாலும் Q0 - Q7 வரை வெளீயீட்டில் எந்தவித மாறுதலும் ஏற்படாது. ஆனால் CLK உள்ளீடு 0 ஆக முன் எந்த நிலையில் வெளியீடுகள் இருந்தனவோ அதே போல் தொடர்ந்தும் இருக்கும். ஆகவே CLK ஆனது 1 ஆக உள்ளபோது மட்டும் உள்ளீடுகளிற்கேற்ப வெளியீடுகள் மாற்றம் அடையும். ஆகவே இது ஒரு 8 பிட் நினைவகமாக தொழிற்படும்.

மேலுள்ள இரு சுற்றுக்களிலும் பிரதானமாக ஒரு வேறுபாடு உள்ளது. அது என்னவெனில், குறியீடாக்கியில் எந்தவொரு கணத்திலும் அதன் உள்ளீட்டில் மாறுதல் ஏற்பட்டால் அதே கணத்தில் வெளியீட்டிலும், சுற்றின் செயற்பாடுகளிற்கேற்ப மாற்றம் ஏற்படும். ஆனால் பதிவக சுற்றில் நிலைமை அப்படியில்லை. CLK ஆனது 1 ஆக உள்ளபோது மட்டுமே வெளியீடு மாறும். அதாவது இந்த பதிவக சுற்றில் நேரத்துடன் தொடரான முறையிலேயே வெளியீடு அல்லது பயன் பெறப்படுகிறது. இதுவே சேர்மான ஏரண சுற்றிற்கும் வரிசை ஏரண சுற்றிற்கும் உள்ளா வேறுபாடு ஆகும்.

Sunday, December 7, 2008

ஜாவா மற்றும் C++ மொழிகளை இணைத்து பயன்படுத்தல்

தற்போது உள்ள கணணி மொழிகளில் VB, ஜாவா, C++ ஆகியன அதிக திறனுடையதாக உள்ளன. இதில் VB, C++ ஆகியன platform dependent மொழிகளாக உள்ளன. இவை இரண்டும் ஜாவாவை விட வேகமாக இயங்கக்கூடியவை. ஜாவாவானது தூய ஒப்ஜெக்ட் ஒரியென்டெட் மொழியாகும். ஜாவாவானது பல நன்மையான வசதிகளை கொண்டிருப்பினும் கணணி வன்பொருட்களை, இயங்குதளத்தை கட்டுப்படுத்துவதற்கு இதில் உள்ள வசதிகள் போதுமானவை அல்ல. இந்த இடத்தில் மாத்திரம் ஜாவாவை C++ உடன் இணைத்து பயன்படுத்த வேண்டி வரும்.

ஜாவா நேட்டிவ் இன்டெர்பேஸ் (Java Native Interface - JNI) எனும் முறை மூலம் C++ மொழியில் தேவையான function களை எழுதி பின்னர் அதனை ஜாவா மொழியில் பயன்படுத்தலாம். C++ மொழியில் functions எழுதப்படும். பின்னர் அவை .dll கோப்பு ஆக மாற்றப்படும். DLL கோப்பிலுள்ள function களை ஜாவா மொழியில் பயன்படுத்த ஒரு இன்டெர்பேஸ் கிளாஸ் உருவாக்கப்பட்டு, அதனூடாக DLL கோப்பிலுள்ள function பயன்படுத்தப்படும்.

ஒரு சிறிய உதாரணம்.

1. கீழ்வருமாறு டைப் செய்து ஒரு ஜாவா கோப்பை உருவாக்குக (Nativeprint.java)

public class Nativeprint {
static {
System.loadLibrary("nativeprint") ;
}
public static native void printHello() ;
}

nativeprint எனப்படுவது DLL கோப்பின் பெயராகும்.

2. பின்னர் இதை கொம்பைல் செய்து C++ Header கோப்பு உருவாக்க வேண்டும்

javac Nativeprint.java
javah Nativeprint

Header கோப்பானது (Nativeprint.h) கீழ்வருமாறு உருவாக்கப்படிருக்கும்
-------------------------------------------------------------------------------
* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class Nativeprint */
#ifndef _Included_Nativeprint
#define _Included_Nativeprint
#ifdef __cplusplusextern "C" {
#endif
/*
* Class: Nativeprint
* Method: printHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_Nativeprint_printHello(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
--------------------------------------------------------------------------------

#include என்பதை #include "jni.h"ஆக மாற்றுக

3. இப்போது VC++ இல் DLL கோப்பு உருவாக்கப்பட வே
ண்டும்

VC++ இல் nativeprint எனும் பெயரில் ஒரு Win32 Dinamic Link Library Project ஐ உருவாக்குக (Empty Project).

இப்போது Project > Add To Project > New மூலமாக ஒரு C++ மூல கோப்பினை (Source File) உருவாக்குக.

#include "jni.h"
#include "jni_md.h"
#include "Nativeprint.h"

JNIEXPORT void JNICALL Java_Nativeprint_printHello(JNIEnv *, jclass) {
printf("Hello From C++") ;
}

இதில் void என்பது function எதனையும் திருப்பி அனுப்பாது என்பதனையும் Nativeprint என்பது கிளாஸின் பெயரையும் printHello என்பது function பெயரையும் குறிக்கும்.

இப்போது உங்களுடைய JDK பிரதான டிரெக்டரி இல் include எனும் sub டிரெக்டரிக்கு இற்கு சென்று அங்கே jni.h எனும் கோப்பையும் அங்கிருந்து win32 எனும் sub டிரெக்டரியில் jni_md.h எனும் கோப்பையும் உங்களுடைய Project Folder இற்கு பிரதி செய்க. Nativeprint.h எனும் கோப்பையும் உங்களுடைய Project Folder இற்கு பிரதி செய்க.

இப்போது Project > Add To Project > File மூலமாக 3 கோப்புகளையும் தனித் தனியாக Project இனுள் சேர்த்து Project ஐ கொம்பைல் செய்து DLL கோப்பை உருவாக்குக.

4. இப்போது ஜாவா மொழி மூலம் DLL function ஐ பயன்படுத்தலாம் (Test.java)

கீழ் குறிப்பிட்டவாறு ஜாவா கோப்பை உருவாக்கி கொம்பைல் செய்து இயக்கி பயன்படுத்தலாம்.

public class Test {
public static void main(String[] args) {
Nativeprint.printHello() ;
}
}

இங்கே Nativeprint என்பது இன்டெர்பேஸ் கிலாஸின் பெயரும், printHello என்பது function இன் பெயருமாகும். இன்டெர்பேஸ் கிளாஸும் (Nativeprint.class), DLL கோப்பும் பிரதான கிளாஸும் (Test.class) ஒரே டிரெக்டரியில் இருக்க வேண்டும்.

Total Views