module main;. reg a, b, Cin;. wire S, Cout;. fulladder f1(a,b,Cin,S,Cout);. initial. begin. a=1'b0;b=1'b0;Cin=1'b0;. #40. $display("0 0 0");. ... <看更多>
「verilog 1'b0」的推薦目錄:
- 關於verilog 1'b0 在 Re: [問題] verilog 問題- 看板Electronics - 批踢踢實業坊 的評價
- 關於verilog 1'b0 在 Some Basic Verilog Learnings - gists · GitHub 的評價
- 關於verilog 1'b0 在 what is wrong with the following code in verilog? - Stack ... 的評價
- 關於verilog 1'b0 在 Please explain the following Verilog code of a D flip flop? 的評價
- 關於verilog 1'b0 在 Verilog没有葵花宝典——day10(PWM) | 1/2顶点 的評價
- 關於verilog 1'b0 在 1'b0 meaning in verilog - YouTube 的評價
verilog 1'b0 在 Please explain the following Verilog code of a D flip flop? 的推薦與評價
1'b0 is Verilog syntax for a constant value that is a one bit number expressed in binary format with a value of zero. A bit value of one would be expressed ... ... <看更多>
verilog 1'b0 在 Verilog没有葵花宝典——day10(PWM) | 1/2顶点 的推薦與評價
用verilog实现PWM控制呼吸灯。呼吸周期2秒:1秒逐渐变亮,1秒逐渐变暗。系统时钟24MHz,pwm周期1ms,精度1us。 题目. 思路; Verilog描述; testbench ... ... <看更多>
verilog 1'b0 在 Re: [問題] verilog 問題- 看板Electronics - 批踢踢實業坊 的推薦與評價
※ 引述《wowow11 (owo)》之銘言:
16'd8 = 0000_0000_0000_0100
16'd4 = 0000_0000_0000_0100
16'd2 = 0000_0000_0000_0010
負二要怎麼以binary表示 ?
1111_1111_1111_1101 + 1
1111_1111_1111_1110 是 -2
-----------------------------------------
1111_1111_1111_1101 是 -3
建議你先做一個,把負數轉為正數的東西
類似 assign posIn[15:0] = ddInput[15] ? ~ddInput[15:0] +1 : ddInput[15:0] ;
然後只有正數拿去做除數跟被除數
然後出來的結果再加個負號....
類似 assign realOp = ddInput[`DdLen]^dvInput[DdLen] ? ~Op : Op ;
-----------------------------------------
這樣應該就能解決您的問題 ,
不過你還有別的更大的問題,
1. code不能合成,裡面用一些wait , repeat
2. 沒有clk的概念.....etc
建議多想想什麼叫做 RTL code
還有您寫出來的code會被合成什麼樣的電路 ?
: 下面是一個divide的code
: `define DvLen 16
: `define DdLen 32
: `define QLen 16
: `define HiDdMin 16
: module divide
: (input [`DdLen-1:0] ddInput,dvInput,
: output reg signed [`QLen-1:0] quotient,
: input go,
: output reg done);
: reg signed [`DdLen-1:0] dividend;
: reg signed [`DvLen-1:0] divisor;
: reg negDivisor,negDividend;
: always begin
: done=0;
: wait(go);
: divisor=dvInput;
: dividend=ddInput;
: quotient=0;
: if (divisor) begin
: negDivisor=divisor[`DvLen-1];
: if (negDivisor) divisor=-dividend;
: negDividend=dividend[`DdLen-1];
: if (negDividend) dividend=-dividend;
: repeat (`DvLen) begin
: quotient=quotient<<1;
: dividend=dividend<<1;
: dividend[`DdLen-1:`HiDdMin]=
: dividend[`DdLen-1:`HiDdMin]-divisor;
: if (!dividend[`DdLen-1]) quotient=quotient+1;
: else
: dividend[`DdLen-1:`HiDdMin]=
: dividend[`DdLen-1:`HiDdMin]+divisor;
: end
: if (negDivisor != negDividend) quotient=-quotient;
: end
: done=1;
: wait(~go);
: end
: endmodule
: 教授要我們寫出一個4種狀況的test bench (正除正 正除負 負除正 負除負)
: 以下是我寫的code
: `include "3.1.v"
: module test_divide;
: reg [`DdLen-1:0] dvInput,ddInput;
: reg go;
: wire done;
: wire [`QLen-1:0] quotient;
: parameter DELY = 100;
: always begin go=1; forever #(DELY/2) go=~go; end
: divide t (ddInput,dvInput,quotient,go,done);
: initial begin
: ddInput=16'd0;dvInput=16'd0;
: #DELY go=1'b0; ddInput= 16'd8; dvInput= 16'd2;
: #DELY go=1'b0; ddInput= -16'd4; dvInput= 16'd2;
: #DELY go=1'b0; ddInput= 16'd2; dvInput= -16'd2;
: #DELY go=1'b0; ddInput= -16'd9; dvInput= -16'd3;
: #DELY $stop;
: end
: initial $monitor($time,,,"ddInput=%d dvInput=%d,quotient=%d",ddInput,dvInput,quotient);
: endmodule
: 在執行正除正沒問題 可是負數就出現一堆數字了 希望各位大大幫我更正一下QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.228.245.85
※ 編輯: Acme 來自: 220.228.245.85 (05/15 01:26)
... <看更多>