Allegro System Capture를 실행하고 라이센스를 Default 선택하면 OrCAD Capture와 같이 되돌리는 GUI command가 없다.
그래서 Default 로 선택을 하면 다시 라이선스를 변경할 방법이 없다.
해결방법은 System Capture를 실행하고 아래와 같이 tcl 코드를 입력한 후 재시작 하면 된다.
Tcl> cps::resetLicenseCache
Allegro System Capture를 실행하고 라이센스를 Default 선택하면 OrCAD Capture와 같이 되돌리는 GUI command가 없다.
그래서 Default 로 선택을 하면 다시 라이선스를 변경할 방법이 없다.
해결방법은 System Capture를 실행하고 아래와 같이 tcl 코드를 입력한 후 재시작 하면 된다.
Tcl> cps::resetLicenseCache
(Blind / Buried Via(=bbvia) 에 대해서, 그리고 직접 만들기)
https://ansan-survivor.tistory.com/98
고밀도 High Density Layer PCB (HDL PCB)를 설계할 때 bbvia를 자주 사용하게 되는데, 여기서는 이 bbvia를 전체적으로 쉽게 생성하고, Layer의 인식을 쉽게 라벨을 붙이고 보여줄 수 있도록 설정, 배치방법에 대한 것이다.
테스트로 만들 bbvia에 대한 Layer는 아래와 같이 8층짜리 Layer이다.
최초 사용 via는 하나의 Through Via밖에 없다.
1. 자동으로 인접한 층에 대하여 BBvia 생성하기 (아래 참고)
https://ansan-survivor.tistory.com/620
* 그러나 인접한 Layer에 대한 Buried Via만 생성하려면 아래와 같이 한다.
이제 Constraint Manager의 Physical에서 확인하면 아래와 같이 자동으로 인접 Layer에 대해 bbvia가 생성된다.
2. Via의 우선순위를 정한다. (나열되어있는건 Via 배치 순위를 정하므로 중요하다)
2-1. Through Via가 맨위에 있다면 Via를 배치할 때 기본으로 Through via가 생성된다. 그러면 매번 선택 Via를 변경해야 함으로 귀찮다.
2-2. 우선순위를 Through Via를 맨 뒤로 보내면 기본으로 bbvia가 배치가 된다. 그러면 Top에서 다른 Layer까지 갈 때 자동으로 BBvia가 배치되면서 이동한다.
3. 위처럼 Layer에 내가 정한 Label (L1 : L2 , L2 : L3 등등)을 붙이고 싶은경우 Cross-Section Editor에서 Layer ID를 수정하면 된다.
Design Parameter의 Display탭의 Drill labels을 체크하면 위 그림처럼 Layer ID가 표시 된다.
4. BBvia의 Constraint Manager를 통해 Same Net Spacing을 정하면 DRC Rule만큼 간격을 정해서 배치 가능하다.
Same net spacing은 아래와 같이 기능을 켜두어야 적용 된다. (Analyze - Analysis Mode - 설정)
5. 드릴 테이블을 뽑아보면 각각 bbvia에 관한 테이블도 함께 나온다.
(MariaDB 설치 방법은 아래 참고)
https://ansan-survivor.tistory.com/1185
MariaDB(MySQL)을 구축하고나서 외부에서 접속을 해보면 접속이 되질 않는다.
그 이유는 mariaDB는 default로 외부접속을 차단해놨기 때문이다.
이를 root 외부접속 허용하는 방법이다.
1. 리눅스에서 root계정으로 접속
$ mysql -u root -p
2. 아래 명령을 순차적으로 입력한다. (비밀번호는 본인이 설정한 root 비밀번호)
use mysql
grant all privileges on *.* to 'root'@'%'identified by '비밀번호';
flush privileges;
그리고 나서 mysql을 종료
exit
3. MySQL을 재시작
sudo systemctl restart mariadb.service
(결과)
윈도우에서 MySQL Workbench로 접속하니 잘 접속이 되었다.
> SELECT VERSION():
$ mysql -V
(윈도우에서는 자동으로 환경변수 등록이 되지 않기 때문에 mysql.exe 파일이 설치된 위치를 찾아야 한다.)
C:\Program Files\MySQL\MySQL Workbench 8.0 CE
윈도우 cmd 창으로 해당 경로로 이동 후
cd C:\Program Files\MySQL\MySQL Workbench 8.0 CE
버전확인 명령어 입력
mysql.exe --version
SQL문에 다음 명령을 넣으면 확인 가능하다.
SHOW GLOBAL VARIABLES LIKE 'PORT';
앞서 구조체에 대한 설명이 있다.
https://ansan-survivor.tistory.com/1331
이 구조체에 대한 인스턴스를 변수 하나가 아닌 배열로 선언이 가능하다.
아래는 arr[3] 으로 배열 3개를 만들어 각각 구조체 인스턴스가 하나씩 들어간 형태이다.
#define _CRT_SECURE_NO_WARNINGS // visual studio 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
struct point
{
int xpos;
int ypos;
};
int main()
{
// point구조체의 인스턴스로 배열선언
struct point arr[3];
int i = 0;
for (i=0;i<3;i++)
{
printf("점 좌표 입력:");
scanf("%d %d", &arr[i].xpos, &arr[i].ypos);
}
for (i = 0; i < 3; i++)
{
printf("[%d, %d]", arr[i].xpos, arr[i].ypos);
}
return 0;
}
결과를 보면 arr[0]에 xpos, ypos 그리고 나머지 arr[1], arr[2]에도 다 들어가있다.
그것을 결과로 출력한 것.
여러 타입(Type) 자료형이 들어가있는 구조체(Struct)의 선언 및 바로 초기화
#include <stdio.h>
struct person
{
char name[20];
char phoneNum[20];
int age;
};
int main()
{
// 구조체 배열 인스턴스를 선언과 동시에 초기화 시키기 (초기값 부여)
struct person arr[3] = {
{"jack", "010-1234-4323", 31},
{"tom", "010-4321-4323", 21},
{"tom", "010-1646-4323", 45}
};
int i;
for (i=0;i<3;i++)
{
printf("%s %s %d \n", arr[i].name, arr[i].phoneNum, arr[i].age);
}
return 0;
}
[C언어] 배열을 뒤집어 출력하는 코드 (포인터 문자열 뒤집어 출력) (2) | 2022.03.19 |
---|---|
[C언어] C언어 최대 공약수 구하기 알고리즘 예제 (재귀함수 최대공약수) (0) | 2022.03.18 |
[C언어] 구조체(struct) 에 대해서, C언어 구조체란? 구조체 사용방법, 구조체 선언과 동시에 초기화 (0) | 2022.03.01 |
[C언어] 두 문자열(string)을 합치는 함수 (strcat함수, strncat함수) (0) | 2022.02.27 |
[C언어] 두문자열(string)을 비교하는 함수. 서로 같은가 비교 (strcmp 함수) (0) | 2022.02.27 |
DFM은 설계단계에서 제조공정까지 고려하여 설계를 할 수 있도록 Rule을 설정해주는 기능이다.
사용 방법은 아래)
https://ansan-survivor.tistory.com/938
https://ansan-survivor.tistory.com/765
그러나 Constraint Manager Rule을 Ravel 프로그래밍언어로 쉽게 개발할 수 있는데,
https://ansan-survivor.tistory.com/963
이미 개발된 Ravel 템플릿을 내장시켜 DFM을 손쉽게 설정할 수 있는 GUI화 된 세팅이 있다.
이는 Allegro PCB Designer 이상의 라이센스 보유자만 사용이 가능하다.
해당 기능은 Manufacture - Setup RAVEL Rules in CM 에 있다.
아래와 같은 창이 뜨는데, 각종 DFM공정에 필요한 Rule을 설정할 수 있다.
해당 기능을 확장하여 클릭해보면, 어떤 기능을 하는지 우측에 설명과 이미지로 보여준다.
우측하단에 Constraint Value가 있고, 여기에 제한할 값을 입력하면 된다.
실제 이 라벨 코드는 설치시 아래 경로에 내장되어있다. 그리고 이 경로에서 불러오는 것이다.
C:\Cadence\SPB_17.4\share\pcb\dfm_ravel\pcb_rules\Assembly_Checks
아래와 관련하여 DFM체크를 손쉽게 진행할 수 있다.
- 테스트포인트(TP)와 솔더마스크 체크
- 실크스크린 텍스트와 TP 간격 체크
- 실크스크린 라인과 TP 간격 체크
- PCB보드 외곽선과 TP 간격 체크
* 실크스크린 DFM체크
- 실크스크린 Reference Text와 Pin(Pad), via, smd 와의 이격거리 체크 (Top면 / Bottom면 별도 설정)
- 실크스크린 Line과 Pin(Pad), via, smd 와의 이격거리 체크 (Top면 / Bottom면 별도 설정)
- 실크스크린 Text의 글자 높이 제한
- 실크스크린 단독 Line 길이 제한
- PCB보드 외곽선과 내부의 Pad, Via, SMD pad의 간격 설정
- 하나의 핀에 Net가 부여 된 경우
- PCB외곽선과 Trace의 최소 거리 제한
- SMD핀 중심으로 부터 가까운 거리고 trace가 들어왔는지 판독
- 솔더마스크(Soldermask)와 PCB 외곽선과의 최소 길이 제한
- 부품(Component)와 Pad간의 간격 제한
- Cutout Hole과 PCB외곽선과의 최소 길이 제한
- Outline을 여러개 생성했는지, 닫힌(Closed)된 형상이 아닌지 등 체크
- Blind/Buried Via (B/Bvia) 및 Micro via의 최소 Drill 깊이 제한
위와 같은 사항들을 손쉽게 제한사항을 둘 수 있어 설계 단계에서 제조과정에서 발생할 문제를 미리 잡을 수 있다.
구조체(struct)란?
- 여러 자료형(int, double 등)을 하나로 묶어서 표현할 수 있도록 함.
- struct [자료형] 형태. 즉, 사용자 정의 자료형을 만듦.
- 구조체를 만들면 여러 자료형을 담고 있는 구조 하나만을 선언해서 가져올 수 있다.
#define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
// x, y점은 서로 독립된 것이 아니라, 하나의 정보를 표현한다.
// 좌표점 세트(구조체)를 아래와 같이 정의
struct point
{
int xpos;
int ypos;
};
// 구조체를 이용해서 좌표간 거리 구하기
int main()
{
// 각각 x,y좌표를 지닌 2개의 구조체 생성.
struct point pos1, pos2;
double distance;
fputs("1번째 좌표: ", stdout);
scanf("%d %d", &pos1.xpos, &pos1.ypos);
fputs("2번째 좌표: ", stdout);
scanf("%d %d", &pos2.xpos, &pos2.ypos);
// 두 좌표 입력된 값 출력
printf("첫번째 좌표점 : %d, %d\n", pos1.xpos, pos1.ypos);
printf("두번째 좌표점 : %d, %d\n", pos2.xpos, pos2.ypos);
return 0;
}
위와 같은 방식으로 구조체 인스턴스(pos1, pos2)를 생성하고, 그 내부에 인자를 하나씩(pos1.xpos, pos1.ypos) 빼서 쓸 수 있다. 인스턴스에서 내부 인자에 접근하는 방법은 마침표(.)을 사이에 넣으면 된다.
인적정보가 담긴 구조체를 생성.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
// char와 int 자료형이 섞여있는 구조체 생성 (인적 데이터)
struct person
{
char name[20];
char phoneNum[20];
int age;
};
int main()
{
// man1 과 man2 두 구조체인스턴스 생성.
struct person man1, man2;
// man1에 대한 데이터 생성. (strcpy함수를 이용해 문자열 복사)
strcpy(man1.name, "홍길동");
strcpy(man1.phoneNum, "010-1234-5678");
man1.age = 23;
// man2에 대한 데이터는 사용자 입력 받음
printf("이름 입력: ");
scanf("%s", man2.name);
printf("번호 입력: ");
scanf("%s", man2.phoneNum);
printf("나이 입력: ");
scanf("%d", &(man2.age));
printf("첫번째 사람 이름: %s \n", man1.name);
printf("첫번째 사람 번호: %s \n", man1.phoneNum);
printf("첫번째 사람 나이: %d \n", man1.age);
printf("두번째 사람 이름: %s \n", man2.name);
printf("두번째 사람 번호: %s \n", man2.phoneNum);
printf("두번째 사람 나이: %d \n", man2.age);
return 0;
}
구조체 인스턴스 man1은 자동입력된 데이터, man2는 유저의 입력은 받는 데이터.
구조체의 Type은 char과 int가 함께 들어가있다.
아래과 같이 main에서 구조체 인스턴스를 선언할 필요없이, 구조체 생성과 동시에 선언이 가능하다.
} 뒤에 띄어쓰기가 반드시 있어야 한다.
아래과 같이 선언과 동시에 값을 넣으면, 구조체에 있는 변수 순서대로 값이 들어간다.
#include <stdio.h>
struct point
{
int xpos;
int ypos;
};
struct person
{
char name[20];
char phoneNum[20];
int age;
};
// 초기화 방식이 배열과 유사함.
// 초기화 할 데이터들을 중괄호 안에 순서대로 나열하면 된다.
int main()
{
struct point pos = { 10, 20 };
struct person man = { "이승기", "010-1234-5678", 21 };
printf("%d %d \n", pos.xpos, pos.ypos);
printf("%s %s %d \n", man.name, man.phoneNum, man.age);
return 0;
}
[C언어] C언어 최대 공약수 구하기 알고리즘 예제 (재귀함수 최대공약수) (0) | 2022.03.18 |
---|---|
[C언어] 구조체(struct)에 배열을 선언하여 사용 방법, 선언과 동시에 초기화 (0) | 2022.03.03 |
[C언어] 두 문자열(string)을 합치는 함수 (strcat함수, strncat함수) (0) | 2022.02.27 |
[C언어] 두문자열(string)을 비교하는 함수. 서로 같은가 비교 (strcmp 함수) (0) | 2022.02.27 |
[C언어] 문자열(string)을 복사하는 함수 (문자열 메모리를 복사, strcpy, strncpy 함수) (0) | 2022.02.27 |