-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
W02_PHJ #6
base: main
Are you sure you want to change the base?
W02_PHJ #6
Conversation
아이디어는 좋았지만 FND랑 LED, Cnt의 역할을 조금 헷갈린 것 같아요.. 그래도 좋은 시도였습니다 |
PHJu/Counter.v
Outdated
|
||
assign {fUp, fDn} = ~i_Push & c_UpDn; | ||
assign o_LED1 = c_Cnt >= 10 ? c_Cnt / 10 : 0; | ||
assign o_LED2 = c_Cnt >= 10 ? c_Cnt % 10 : c_Cnt; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
새로운 해결방법! o_LED에 대한 값을 10 처리를 했네요 ㅎㅎ
아쉬운건 어차피 값은 c_Cnt에 저장이 되니 c_Cnt에 저장되는 부분을 손봤으면 어땠을까 싶네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그 때 설명을 들었을때 한 세그먼트에 0~9까지 표현이 된다고 기억을 했습니다 그래서 저는 1의 자리와 10의 자리도 표현하고 싶어서 세그먼트를 하나 더 만들려고 했고 그거를 10으로 나누어서 몫과 나머지로 표현,,,하고자 했습니다
PHJu/Counter.v
Outdated
begin | ||
n_UpDn = i_Push; | ||
n_Cnt = fUp ? c_Cnt * 2 : | ||
fDn ? c_Cnt / 2 : c_Cnt + 2; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여긴 일부러 손본건가요? 여기 있는 코드 대로라면
- fUp가 1인 경우 : 현재 값에 2를 곱한다
- fDown가 1인 경우 : 현재 값을 2로 나눈다
- 둘 다 아닌 경우 : c_Cnt에 2를 더한다
이렇게 되는데 의도한 부분이 맞나요? 매 클락마다 2씩 더해질텐데..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
일부러 손댄 것이 맞습니다 원래 1씩 더해지고 빼는 식이었는데 저는 2가 계속 곱해도보고 나누고 싶었고 둘 다 아니라면 2를 더하고 싶었숨다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1번 버튼은 * 2
2번 버튼은 / 2 일 때
언제 +2가 되는 걸 의도한건가요?? 만약 이대로라면 1초에 5,000,000번 2가 더해지게 돼서 그냥 FND가 반짝반짝 거리는 걸로 보일 것 같은데 ㅋㅋㅋㅋ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅋㅎㅋㅎㅋㅎㅋㅎㅋㅎ 이때 왜 그랬는지는 모르겠는데 지금 다시 보니까 +2가 없고 그냥 c_Cnt로 했었어야 했는데 그래서 고쳐서 올릴려고 해요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@yuyu0830 LED지우고 코드 FND를 추가했는데 맞는지 확인 부탁드려도 될까요..?🥺
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아직 조금 헷갈리는 것 같지만 그래도 점차 이해를 하는 것 같아서 너무너무 뿌듯합니다. 진짜 조금만 손보면 될듯
begin | ||
n_UpDn = i_Push; | ||
n_Cnt1 = fUp ? c_Cnt * 2 : | ||
fDn ? c_Cnt / 2 : c_Cnt + 1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어 그러고보니까 c_Cnt 랑 c_Cnt1 이랑 c_Cnt2랑 혼용되는 것 같아요
fDn ? c_Cnt / 2 : c_Cnt + 1; | ||
if(n_Cnt1>=10){ | ||
n_Cnt2=n_Cnt1/10; | ||
n_Cnt1-n_Cnt1%10; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 제가 생각하는 대로라면
n_Cnt1(1의 자리 숫자) 가 10보다 같거나 크면
- n_Cnt2(10의 자리 숫자) 를 n_Cnt1의 10의 자리 수 만큼 더한다
- n_Cnt1를 다시 10 보다 작게 만든다
인 것 같은데 여기서 생길 수 있는 문제점이 몇 개 있습니다. n_Cnt1의 최대치는 15인데 9를 *2 한 경우 최대치를 넘어 18을 저장해야하는 오류
, n_Cnt2 는 *2 연산에 포함되지 않는 오류
가 있을 수 있습니다.
이 부분은 로직이 조금 복잡할 것 같아서 조금 힌트를 드릴게요 (저도 생각하느라 시간이 좀 걸렸네요 ㅎㅎ..)
조건
- FND 2개를 써서 0~99 까지 카운터 표현
- 1번 버튼을 누르면 현재 값 * 2
- 2번 버튼을 누르면 현재 값 / 2
- 99를 넘어가면 99에서 멈춤
변수
reg [6:0] c_Cnt, n_Cnt (0 ~ 99까지 저장)
output wire [4:0] o_LED1, o_LED2 (각각 1의 자리, 10의 자리 출력값)
assign o_LED1 = c_Cnt % 10; // c_Cnt 의 1의 자리
assign o_LED2 = c_Cnt / 10; // c_Cnt 의 10의 자리
n_Cnt는 1번 버튼을 누르면 현재값 * 2 (혹시 99보다 크면 99로 고정), 2번 버튼을 누르면 현재 값 / 2, 둘 다 아니면 현재값 유지
코드의 목적과 바꾼점
코드 분석(Counter.v)
코드분석(FND.v)
코드분석(tb_Counter.v)