VERILOG 및 VHDL은 전자 칩 용 프로그램을 작성하는데 사용되는 하드웨어 설명 언어이다. 이러한 언어는 컴퓨터의 기본 아키텍처를 공유하지 않는 전자 장치에 사용된다. VHDL은 VERILOG 보다 오래된 언어이며 ADA와 PASCAL을 기반으로 한다. VERILOG는 상대적으로 최근 버전이며 C 프로그래밍 언어를 기반으로 한다.
VHDL은 강력한 형식의 언어(Strong Type Language)이다. 반대의 개념으로 약한 타입 언어(Weak Type Language)가 있다. 강한 타입 언어는 타입 검사를 통과하지 못한 ㅡ로그램의 실행 자체를 막지만, 약 타입 언어는 런타임에 타입 오류를 만나는 한이 있더라도 실행을 막지 않는다는 것이다. 그렇기에 VHDL은 강력한 형식이 아닌 스크립트는 컴파일 할 수 없다. VHDL과 같이 같이 강력한 형식의 언어는 다른 클래스와 함께 변수의 혼합 또는 연산을 허용하지 않는다. VERILOG는 강력한 형식의 언어와 반대되는 약한 형식을 사용한다. 또 다른 차이점은 대소 문자 구분이다.
VERILOG는 대소 문자를 구별하며, 사용된 사례가 이전에 사례와 일치하지 않는 경우 변수를 인식하지 못한다. 반면 VHDL은 대소 문자를 구분하지 않으므로 이름의 문자와 주문이 동일하게 유지되는 한 사용자는 자유롭지 대소 문자를 변경할 수 있다.
일반적으로 VERILOG는 VGDL보다 배우기 쉽다는 장점이 있다. 이것은 부분적으로 C 프로그래밍 언어의 인기 때문에 대부분의 프로그래머가 VERILOG에서 사용되는 문법적 규칙을 잘 알고 있기 때문이다.
VHDL은 높은 수준의 모델링을 돕는 훨씬 많은 구조를 갖는 이점에 있으며 프로그래밍되는 장치의 실제 작동을 반영한다. 복잡한 데이터 유형과 패키지는 크고 복잡한 시스템을 프로그래밍할 때 매우 바람직하다. VERILOG에는 패키지 개념은 없으며 모든 프로그래밍은 프로그래머가 제공 하난 간단한 데이터 유형으로만 수행해야 한다.
마지막으로, VERILOG는 소프트웨어 프로그래밍 언어의 라이버러리 관리가 부족하다. 즉, VERILOG는 프로그래머가 컴파일 하는 동안 호출되는 별도의 파일에 피료한 모듈을 넣는 것을 허용하지 않는다. VERILOG의 대규모 프로젝트는 대규모의 추적이 어려운 파일로 끝날 수 있다.

/*____check.cs*/



using System;
using System.Text;
using System.Threading;
using System.Runtime.InteropServices;//DLL
using System.Timers;

class TouchMessageHooking
{
[DllImport("user32.dll")]
public static extern void keybd_event(byte vk, byte scan, int flags, ref int info);

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hwnd, int unMsg, IntPtr wparam, IntPtr lparam);

[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hwnd, int unMsg, int wparam, int lparam);

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string classname, string windowname);

int WM_KEYDOWN=0x0100;
int VK_F5=0x74;
int VK_ENTER=13;
int ____timeinterval=9000 * 4;
int index=0;

System.Timers.Timer tm_basic = new System.Timers.Timer();
System.Timers.Timer tm = new System.Timers.Timer();

IntPtr ____handle_mmmm  = IntPtr.Zero;
IntPtr ____handle_popup = IntPtr.Zero;

int toggle=0;
int ____thread_sleep_time=400;

ConsoleKeyInfo keyinfo;

public void running()
{
tm.Elapsed += new ElapsedEventHandler(____time_tick);
tm.Interval = ____timeinterval;
tm.Start();

tm_basic.Elapsed += new ElapsedEventHandler(____time_tick_basic);
tm_basic.Interval = 1000;
tm_basic.Start();

while(true)
{
keyinfo=Console.ReadKey(true);

if(keyinfo.Key.ToString()=="Escape")
{
break;
}
else if(keyinfo.Key.ToString()=="Spacebar")
{
if(toggle==0)
{
Console.WriteLine("Stop");
tm.Stop();
toggle=100;
}
else
{
Console.WriteLine("Restart");
tm.Start();
toggle=100;
}
}
}
}
void ____time_tick_basic(object sender, ElapsedEventArgs e)
{
Console.WriteLine(DateTime.Now.ToString() + ">>>>Index:[" + index.ToString("0000") + "]");
Console.Title = DateTime.Now.ToString() + ">>>>Index:[" + index.ToString("0000") + "]";

index++;
}
void ____time_tick(object sender, ElapsedEventArgs e)
{
IntPtr ____result=IntPtr.Zero;
bool ____toggle;
string handleCaption="http://10.1.117.11:7101/getDashboardLink.do?dashboard_type=";

____handle_mmmm=FindWindow(null, handleCaption);
____toggle=PostMessage(____handle_mmmm, WM_KEYDOWN, VK_F5, 0);

Console.WriteLine(____handle_mmmm);
if(____toggle==true) Console.WriteLine("PostMessage succ!!");
else Console.WriteLine("PostMessage fail!!");

Thread.Sleep(____thread_sleep_time);
____time_tick_mmmm();

index=0;
}
void ____time_tick_mmmm()
{
IntPtr ____result=IntPtr.Zero;
bool ____toggle;
string handleCaption="Windows Internet Explorer";

____handle_mmmm=FindWindow(null, handleCaption);
____toggle=PostMessage(____handle_mmmm, WM_KEYDOWN, VK_ENTER, 0);

Console.WriteLine(____handle_mmmm);
if(____toggle==true) Console.WriteLine("PostMessage succ!!");
else Console.WriteLine("PostMessage fail!!");
}
}

class Program
{
public static void Main()
{
TouchMessageHooking nm = new TouchMessageHooking();
nm.running();
}
}




/*File Attach*/

 

daily_check.txt
0.00MB

 

____check.cs
0.00MB

 

 

 

https://open.kakao.com/o/sleUyWBd

[Redis] BLPOP

Blocking 된 상태에서 list를 pop 하는 것을 말한다. LPOP의 blocking 버전이라고 할 수 있다.
BLPOP가 호출이 되면, list의 헤더에 있는 key 값이 호출된다.

redis> BLPOP list1 list2 list3 0

list1, list2, list3에 존재하는 키 값중 가장 먼저 쓰여진 list1에 저장된 키 값 하나를 pop 한다.
list1에 값이 없다면 list2의 값을 pop 한다.
만약 list1, list2, list3 모두 값이 없다면 redis는 다른 client에서 해당 list에 값을 입력하기 전까지는 block 된다.
(맨 마지막 0은 timeout 파라미터로써 0일 경우엔 INFINITE, 그 외엔 초단위의 타임 아웃 값을 가짐)

redis> RPUSH list1 a b c d e
(integer) 5
redis> RPUSH list2 1 2 3 4 5
(integer) 5
redis> BLPOP list1 list2 0
1)"list1"
2)a
redis> BLPOP list2 0
1)"list2"
2)1

C#)

DataEncoding ____dataEncode = new DataEncoding();
try
{
byte[][] jsonByte = null; jsonByte=____receiveRedis.BLPop("KEYNAME",10);
for(ii=1; ii<jsonByte.Length; ii++)
{
byte[] jsonEachByte = new byte[jsonByte[ii].Length];
Console.WriteLine(____dataEncode.EncodingByteToStr(jsonEachByte));
}
}

1) NetWork Application(for example, APM)
Linux Server Program - C Language
Windows Client Program - C# Language(Visual Studio)

2) Web
Linux Server - tomcat(by java beans & jsp)
Client - Web Browser(IE,Chrome)

3) StandAlone Window Application
- C# Language(Visual Studio)

4) Batch Application IN MySQL 
- C Language

5) Console Apllication In Windows
- C Language
- C# Language
- JAVA Language

6) Javascript Program In WebBrowser
- Javascript Language, Java Server Page, Java Beans
- HTML/CSS

 

TRIS MECHANISM,,,,,,,,

>>>>MAPY=10
>>>>MAPX=10
>>>>ARR=4
>>>>DESIGN[ARR,ARR]={{1,1,1,1},{1,0,0,0},{1,0,0,0},{1,0,0,0}};
>>>>TRIS[MAPY,MAPX]
>>>>xpos=1
>>>>ypos=0
>>>>score=0

 

1 1 1 1 1 0 0 0 0 1
1 1 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1


1. TIME EVENT (?) - c# ElapsedEventHandler()
2. KEY EVENT (?) - c# ConsoleKeyInfo Structure
3. CHECK LOGIC (?) - Common Logic

+ Recent posts